python使用python-docx处理word

一、python-docx简介

python自动化操作Word最常用的模块就是python-docx。

python-docx模块处理word文档,处理方式是面向对象的。也就是说python-docx模块会把word文档,文档中的段落、文本、字体等都看做对象,对对象进行处理就是对word文档的内容处理。

如果需要读取word文档中的文字(一般来说,程序也只需要认识word文档中的文字信息),需要先了解python-docx模块的几个概念。
Word文档一般可以结构化成三个部分:
Document,表示一个word文档
Paragraph,表示word文档中的一个段落
Run,表示段落中的文字块
在这里插入图片描述
Document - Paragraph - Run三级结构,这是最普遍的情况。但是如果Word中存在表格,这时会有新的文档结构,如下:
在这里插入图片描述
这时的结构非常类似Excel, 可以看成Document-Table-Row/Column-Cells四级结构。

# 安装
pip install python-docx

二、基本使用

1、新建与保存word

from docx import Document
document = Document() #创建一个空文档
document.save(r'D:\自动化\word\道德经.docx') # 保存文件

2、写入Word

from docx import Document # 导入docx库
from docx.shared import Inches, Cm # 导入英寸单位 厘米Cm (可用于指定图片大小、表格宽高等)

# 打开一个document
file_path = r'D:\自动化\word\道德经.docx'
document = Document(file_path)

# 设置标题段落
document.add_heading('道德经', 0)

# 添加段落
p = document.add_paragraph('道可道,非常道;名可名,非常名。')
p.add_run('无名,天地之始,').bold = True # 在指定段落后添加粗体文字
p.add_run('有名,') # 在指定段落后添加默认格式文字
p.add_run('万物之母。').italic = True # 在指定段落后添加斜体文字

# 添加1级标题=标题1
document.add_heading('故常无欲,', level=1)

# 添加指定格式段落 style后面则是样式
document.add_paragraph('以观其妙,', style='Intense Quote')
# 添加段落,样式为List Bullet类型
document.add_paragraph('常有欲,以观其徼。', style='List Bullet')
# 添加段落,样式为List Number类型
document.add_paragraph('此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。', style='ListNumber')
document.add_paragraph('所以说,霸夫老师教Python,教得妙。', style='List Number')

# 添加图片
img_path = r'D:\自动化\word\girl.png'
document.add_picture(img_path)
document.add_picture(img_path, width=Inches(1.25))
document.add_picture(img_path, width=Cm(5), height=Cm(5))

# 待添加到表格的内容
records = (
	(1, '李白', '诗仙'),
	(2, '杜甫', '诗圣'),
	(3, '白居易', '香山居士, 与元稹并称元白, 与刘禹锡合称刘白')
)

# 添加一个1行3列的表格, 表格样式为Table Grid
# 表格样式参数可选,缺省时为Normal Table
# Normal Table
# Table Grid
# Light Shading、 Light Shading Accent 1 至 Light Shading Accent 6
# Light List、Light List Accent 1 至 Light List Accent 6
# Light Grid、Light Grid Accent 1 至 Light Grid Accent 6
# 太多了其它省略...
table = document.add_table(rows=1, cols=3, style='Table Grid')
# 填充标题行
hdr_cells = table.rows[0].cells
hdr_cells[0].text = '序号'
hdr_cells[1].text = '姓名'
hdr_cells[2].text = '描述'

# 动态添加数据行
for id, name, desc in records:
	row_cells = table.add_row().cells
	row_cells[0].text = str(id)
	row_cells[1].text = name
	row_cells[2].text = desc

document.add_paragraph('再添加一个表格')
# 待添加到表格的内容
records2 = [
	["姓名", "性别", "家庭地址"],
	["貂蝉", "女", "河北省"],
	["杨贵妃", "女", "贵州省"],
	["西施", "女", "山东省"]
]

# 添加一个4行3列的表格
table2 = document.add_table(rows=4, cols=3, style='Light List Accent 5')

# 填充表格
for 行索引 in range(4):
	cells = table2.rows[行索引].cells
	for 列索引 in range(3):
		cells[列索引].text = str(records2[行索引][列索引])
# 添加分页符
document.add_page_break()
# 保存文档
document.save(file_path)

(1)打开文档

Document()传入参数是打开相应的文档,不传参数则是创建一个空文档。

# 创建一个空文档
document = Document()
# 加载旧文档(用于修改或添加内容)
document = Document('exist.docx')

(2)添加标题

level等级1-9 也就是标题1-标题9,我们可以在旧文档中将标题格式设置好,使用Python-docx打开旧文档,再添加相应等级标题即可。

document.add_heading('一级标题', level=1)

(3)添加段落

段落在 Word 中是基本内容。它们用于正文文本,也用于标题和项目列表(如项目符号)。
添加段落的时候,赋值给一个变量,方便我们后面进行格式调整。

p = document.add_paragraph('道可道,非常道;名可名,非常名。')
# 添加指定格式段落 style后面则是样式
document.add_paragraph('以观其妙,', style='Intense Quote')

(4)添加文字块

在指定段落上添加文字块。

p.add_run('无名,天地之始,').bold = True # 在指定段落后添加粗体文字
p.add_run('有名,') # 在指定段落后添加默认格式文字
p.add_run('万物之母。').italic = True # 在指定段落后添加斜体文字

(5)添加图片

width, height可用于设置图片尺寸,缺省时为图片默认大小。

document.add_picture('girl.png')
document.add_picture('girl.png', width=Inches(1.25))
document.add_picture('girl.png', width=Cm(5), height=Cm(5))

(6)添加表格

表格样式style参数可选,缺省时默认为Normal Table。
常用样式有:
Normal Table
Table Grid
Light Shading、 Light Shading Accent 1 至 Light Shading Accent 6
Light List、Light List Accent 1 至 Light List Accent 6
Light Grid、Light Grid Accent 1 至 Light Grid Accent 6

# 添加一个4行3列的表格
table = document.add_table(rows=4, cols=3)
table = document.add_table(rows=4, cols=3, style='Light Shading Accent 2')

(7)添加分页符

# 添加分页符
document.add_page_break()

3、读取word

'''
文档.paragraphs可以获取文档中所有段落数据,不包含表格,这里注意一点图片跟分页符也会计算在段落数据内
段落.runs 可以获取段落的所有文字块
文档.tables可以获取文档中所有表格数据
文档.save (path) 可以用于保存修改后的文档本身,同样也可在将打开的文档另存为新文档
'''
from docx import Document
doc = Document(r'D:\自动化\word\道德经.docx')

# 读取 word 中所有内容
for p in doc.paragraphs:
	print(p, p.text)

# 读取指定段落中的所有run
for run in doc.paragraphs[1].runs:
	print(run, run.text)

# 读取 word中所有表格内容
for 表格 in doc.tables:
	print(表格)
	forin 表格.rows:
		for 单元格 in.cells:
			print(单元格.text)

doc.save(r'D:\自动化\word\另存为新文档.docx')

### 如何使用 Python 处理 .docx 文件 #### 安装 `python-docx` 库 要处理 `.docx` 文件,首先需要安装 `python-docx` 库。可以通过以下命令来完成安装: ```bash pip install python-docx ``` 此库专门用于操作 `.docx` 文件,不支持 `.doc` 文件[^3]。 #### 导入必要的模块 在编写代码之前,需导入所需的模块: ```python from docx import Document ``` 这一步骤允许后续对 Word 文档进行各种操作。 #### 读取现有的 .docx 文件 通过创建 `Document` 类的一个实例并传入文件路径参数,可以打开已有的 `.docx` 文件: ```python document = Document('example.docx') ``` 一旦打开了文档,就可以遍历其段落和表格等内容。例如,获取所有段落的文字内容: ```python for para in document.paragraphs: print(para.text) ``` 对于表格中的数据,则可通过访问 `tables` 属性实现: ```python table_data = [] for table in document.tables: for row in table.rows: cell_texts = [cell.text for cell in row.cells] table_data.append(cell_texts) print(table_data) ``` 上述方法能够有效地提取出整个表单的数据结构,并将其存储在一个列表里以便进一步分析或展示[^2]。 #### 编辑现有 .docx 文件 除了简单的读取外,还可以修改已有文档的内容。比如向特定位置添加新的段落: ```python new_paragraph = 'This is a new paragraph.' p = document.add_paragraph(new_paragraph) ``` 如果想要更改某个具体段落的样式或其他属性,也可以这样做: ```python paragraph_to_change = document.paragraphs[index_of_the_paragraph] run = paragraph_to_change.add_run() font = run.font font.bold = True ``` 这里假设知道目标段落在文档内的索引值;另外还展示了怎样设置字体加粗效果作为样式的例子之一[^4]。 #### 创建一个新的 .docx 文件 当从零开始构建一份全新的 Word 文档时,只需初始化一个空白的 `Document()` 对象即可: ```python new_doc = Document() # 添加标题 new_doc.add_heading('My New Doc Title', level=1) # 插入一些正文文字 new_doc.add_paragraph('Here comes the main content.') # 将新创建好的文档保存到磁盘上指定的位置 new_doc.save('my_new_document.docx') ``` 这段脚本会生成一个名为 "my_new_document.docx" 的文件,在当前工作目录下找到它之后就能看到里面包含了刚才设定的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秃了也弱了。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值