Python python-docx 使用教程

news2024/12/25 23:41:40

openpyxl是Python下的Word库,它能够很容易的对Word文档进行读取

  • 安装方法pip install python-docx
  • 国内镜像安装pip install -i https://mirrors.aliyun.com/pypi/simple/ python-docx(推荐,安装更快)
  • 中文文档:https://www.osgeo.cn/python-docx/index.html#
  • 文档、段落、文字块之间的关系
    • 一个Word文档(document)由若干个段落(paragraph)组成;
    • 一个段落(paragraph)可以由若干个文字块(run)组成;
      在这里插入图片描述

文档对象 - Document

  • add_heading(text=‘’, level=1):添加标题
  • add_paragraph(text=‘’, style=None):添加段落
  • add_page_break():添加换页符
  • add_table(rows, cols, style=None):添加表格
  • add_picture(image_path_or_stream, width=None, height=None):添加图片
  • paragraphs:获取文档内所有段落集合
  • tables:获取文档内所有表格集合
  • styles:获取文档内所有可用样式集合
  • save(path_or_stream):保存文档

段落对象 - paragraph

  • add_run(text=None, style=None):添加标题
  • insert_paragraph_before(text=None, style=None):添加段落
  • alignment:获取或设置段落对齐方式
  • text:获取或设置段落文本
  • runs:获取段落内所有文字块集合
  • style:获取或设置段落样式

文字块对象 - run

  • text:获取或设置文字块文本
  • bold:获取或设置加粗
  • italic:获取或设置倾斜

表格对象 - table

  • add_row(text=None, style=None):添加行
  • rows:获取所有行
  • columns:获取所有列
  • cell(row_idx, col_idx):根据行列索引获取指定单元格,其中(0,0)是最左上角的单元格

写入文件

from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.shared import Cm, RGBColor, Pt

doc = Document()
"""添加标题"""
para_head = doc.add_heading("正文一级标题",level=1)  # level代表标题级别
para_head.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER     # 标题居中
"""添加正文段落"""
p1 = doc.add_paragraph("我是正文第一段")
p1.text += ",第一段追加文本"
p2 = doc.add_paragraph("我是正文第二段")
p2.insert_paragraph_before("我在第二段之前")
# doc.add_page_break()    # 添加分页符
"""添加带文字块的段落"""
p3 = doc.add_paragraph("我是带样式的段落——")
p3.add_run("加粗").bold = True
p3.add_run("倾斜").italic = True
p3.add_run("正常")
red_run = p3.add_run("20,加粗,红色")
red_run.font.size = Pt(20)
red_run.font.bold = True
red_run.font.color.rgb = RGBColor(255,0,0)
"""添加有序和无序列表"""
opts = ['选项1','选项2', '选项3']
for opt in opts:    # 有序列表
    doc.add_paragraph(opt, style='List Number')
for opt in opts:    # 无序列表
    doc.add_paragraph(opt, style='List Bullet')
"""添加表格"""
list1 = [["姓名","性别","家庭地址"],["唐僧","男","湖北省"],
         ["孙悟空","男","北京市"],["猪八戒","男","广东省"]]
table = doc.add_table(rows=4,cols=3)    # 创建指定行列的表格
for row_index in range(4):
    row_cells = table.rows[row_index].cells
    for cell_index in range(3):
        row_cells[cell_index].text = str(list1[row_index][cell_index])
row_cells = table.add_row().cells   # 添加一行
row_cells[0].text = "沙和尚"
row_cells[1].text = "男"
row_cells[2].text = "湖南省"
"""添加图片"""
doc.add_picture(r"resource/python.png")     # 默认大小
doc.add_picture(r"resource/word.png",width=Cm(5),height=Cm(5))  # 指定宽高
"""保存文档"""
doc.save(r"resource/Test.docx")

在这里插入图片描述

读取文件

获取段落

from docx import Document
path = r"resource/Test.docx"
"""获取段落"""
doc = Document(path)    # 读取的doc可通过save方法保存
for paragraph in doc.paragraphs:
    print(paragraph.text,paragraph.style.name)  # 段落text可修改,文字块、表格同样

在这里插入图片描述

获取文字块

from docx import Document
path = r"resource/Test.docx"
"""获取文字块"""
p5 = doc.paragraphs[4]
for run in p5.runs:
    print(run.text,run.bold,run.italic)

在这里插入图片描述

获取表格

from docx import Document
path = r"resource/Test.docx"
"""获取表格"""
table0 = doc.tables[0]
for row in table0.rows:     # 获取表格所有行
    for cell in row.cells:      # 获取表格行的所有单元格
        print(cell.text,end=" ")
    print()
print(table0.cell(2,0).text)    # 根据行列索引获取指定单元格

在这里插入图片描述

获取图片

import os
from docx import Document
path = r"resource/Test.docx"
"""获取图片"""
for rel in doc.part.rels:  # 获取所有part对象的id(rel→str,例如rId3)
    rel = doc.part.rels[rel]    # 根据id获取文件对象
    if "image" in rel.target_ref:  # 根据part对象的名称判断是否是图片(例如media/image1.jpeg)
        with open("resource/"+os.path.basename(rel.target_ref), "wb") as f:
            f.write(rel.target_part.blob)  # 将图片以二进制格式写入

获取所有可用样式

for style in doc.styles:
    print(style)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1063834.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法】关于排序你应该知道的一切(下)

和光同尘_我的个人主页 单程孤舟,出云入霞,如歌如吟。 --门孔 八大排序 🕯️前言1. 常见排序算法2. 常见排序算法实现2.1. 冒泡排序2.1.1. 基本思想2.1.2. 代码实现2.1.3. 特性 2.2. 快速排序2.2.1. hoare法基本思想代码实现 2.2.2. 快速排…

静图表情包怎么做成动态图?动图表情包制作教程

静态的图片不如动态的图片吸引人,动态的图片内容丰富、生动,体积小还易于传播保存。Gif格式动图其实就是由一帧一帧的图片合成的带有动态效果的图片。下面,给大家介绍一下动图gif制作(https://www.gif.cn/)的方法&…

asp.net班级管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net班级管理系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语言开发 asp.net班级管理系统 二、功能介绍 1…

操作系统和进程相关的认识

目录 冯诺依曼体系结构 冯诺依曼体系结构五大组成部分 为什么数据只能通过存储器进行输入和输出 操作系统 概念一:访问操作系统的请求都是通过系统调用完成的 操作系统如何管理用户信息 概念二:先描述,再组织。 进程的概念 在认识进行相关的知…

Java基础--泛型详解

一、背景 java推出泛型之前,集合元素类型可以是object类型,能够存储任意的数据类型对象,但是在使用过程中,如果不知道集合里面的各个元素的类型,在进行类型转换的时候就很容易引发ClassCastException异常。 二、概念 …

POJ 2104 K-th Number 平方分割(分桶法)

一、题目大意 长度为n&#xff08;n<100000&#xff09;的数组&#xff0c;进行m次查询&#xff08;m<5000&#xff09;&#xff0c;每次查询时&#xff0c;输入为 i j k&#xff0c;返回为数组 [i,j] 的分片里第k大数字&#xff08;1<i<j<n,k<j-i1) 二、解…

基于Java的校园自助洗衣系统设计与实现(源码+lw+ppt+部署文档+视频讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

python机器学习之梯度下降法

系列文章目录 第一章 Python 机器学习入门之线性回归 第一章 Python 机器学习入门之梯度下降法 梯度下降法 系列文章目录前言一、梯度下降法1.梯度下降法简介2.基本原理 梯度下降函数效果展示 前言 上一篇文章里面说到了用梯度下降法来对最小化代价函数和模型参数进行求解&am…

计算机网络八股

1、请你说说TCP和UDP的区别 TCP提供面向连接的可靠传输&#xff0c;UDP提供面向无连接的不可靠传输。UDP在很多实时性要求高的场景有很好的表现&#xff0c;而TCP在要求数据准确、对速度没有硬件要求的场景有很好的表现。TCP和UDP都是传输层协议&#xff0c;都是为应用层程序服…

八、【快速选择工具组】

文章目录 对象选择工具快速选择工具魔棒工具 对象选择工具 当我们选择对象选择工具时&#xff0c;需要先注意上边有一个循环的圆&#xff0c;它会进行内容识别&#xff0c;当识别完成会停止旋转。这个时候我们按住n键&#xff0c;或者将鼠标放上对应的图形时会出现选中的颜色。…

多实例学习MIL(easy / hard)

多示例学习&#xff08;Multiple Instance Learning&#xff09; - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/377220948 多示例学习 和弱监督&#xff08;weakly supervised&#xff09;有一定的关系&#xff0c;弱监督weakly supervised有三个含义&#xff08;或者说三…

ethercat EOE arp

1 网口设置 电脑地址位169.254.254.3 2 从站地址 3 PING 正常 异常 4 抓包

【方法】如何取消ZIP压缩包的密码?

我们知道&#xff0c;在压缩ZIP文件的时候&#xff0c;可以设置“打开密码”来保护压缩包&#xff0c;那后续不需要保护了&#xff0c;不想每次打开压缩包都输一次密码&#xff0c;要如何取消密码呢&#xff1f; 比较常用的方法是先把ZIP压缩包解压后&#xff0c;再压缩成没有…

铝合金分类及相关总结

1 铝合金常识 铝合金是工业中应用最广泛的一类有色金属结构材料&#xff0c;在航空、航天、汽车、机械制造、船舶及化学工业中已大量应用。对于常用的铝合金&#xff0c;我们通常根据其铝及其他元素的含量&#xff0c;将其分为两大类&#xff0c;分别是纯铝和铝合金。对这两大类…

网络安全行业真的内卷了吗?网络安全就业就业必看

前言 有一个特别流行的词语叫做“内卷”&#xff1a; 城市内卷太严重了&#xff0c;年轻人不好找工作&#xff1b;教育内卷&#xff1b;考研内卷&#xff1b;当然还有计算机行业内卷…… 这里的内卷当然不是这个词原本的意思&#xff0c;而是“过剩”“饱和”的替代词。 按照…

JMeter接口自动化测试(数据驱动)

之前我们的用例数据都是配置在HTTP请求中&#xff0c;每次需要增加&#xff0c;修改用例都需要打开JMeter重新编辑&#xff0c;当用例越来越多的时候&#xff0c;用例维护起来就越来越麻烦&#xff0c;有没有好的方法来解决这种情况呢&#xff1f;我们可以将用例的数据存放在cs…

Effective Modern C++ 第七章 并发API 2

目录 条款37&#xff1a;使std::thread型别对象在所有路径皆不可联结 要点速记&#xff1a; 条款38&#xff1a;对变化多端的线程句柄析构函数行为保持关注 要点速记&#xff1a; 参考&#xff1a;EffectiveModernCppChinese/src/7.TheConcurrencyAPI/item37.md at master …

【java爬虫】使用vue+element-plus编写一个简单的管理页面

前言 前面我们已经将某宝联盟的数据获取下来了&#xff0c;并且编写了一个接口将数据返回&#xff0c;现在我们需要使用vueelement-plus编写一个简单的管理页面进行数据展示&#xff0c;由于第一次使用vue编写前端项目&#xff0c;所以只是编写了一个非常简单的页面。 项目结…

3263页学习资料,一本在手,python不愁!

Python3.11已经发布&#xff0c;新的版本速度提升2倍&#xff0c;以弥补与其他编程语言在速度上的缺陷。可以预见Python语言在未来的应用范围会越来越广。 python学习方向建议&#xff1a; 如果你是本科及以下学历&#xff0c;建议你学习以下两个方向 爬虫。简单的爬虫库&am…

异步电机直接转矩控制学习(两电平12扇区)

导读&#xff1a;传统的直接转矩控制方法6扇区电压矢量选择会导致磁链控制不对称、转矩脉动大等问题&#xff0c;本期介绍一种把扇区细分为12扇区的新型三相异步电机直接转矩控制方法&#xff0c;仿真结果证明磁链轨迹、转速及转矩脉动明显变小&#xff0c;异步电机三相定子电流…