python学习-处理word文档
本文介绍 python 如何处理
Word
文档,包括依赖安装、读取和写入、段落处理、Run内容操作、文件样式管理、表格处理、插入图片、插入页眉和页脚。供自己以后查漏补缺,也欢迎同道朋友交流学习。
引言
上面几篇文章,主要介绍了 Python
的基础语法、面向对象编程的用法、文件读写、异常处理、正则等基础知识。
文件读写我用的是 txt
文件格式,但在现实环境中,我们经常需要处理各种格式的文档,包括 Word
文档、 PDF
文档、 Excel
文档、 CSV
文档等等。
本章就主要介绍 Python 如何处理 Word
文档,包括依赖安装、读取和写入、段落处理、Run内容操作、文件样式管理、表格处理、插入图片、插入页眉和页脚。
安装依赖库
Python
提供了强大的库来处理 Word
文档,例如 python-docx
,它允许你以编程方式创建、修改和读取 Word 文档。
pip install python-docx
# or
pip3 install python-docx
Python中的Word文档结构
文档的结构主要由以下几个核心组件构成:
- Document(文档):这是整个 Word 文档的顶层容器。一个
Document
对象代表一个完整的 Word 文档。 - Paragraph(段落):文档被分割成若干个
段落
,每个段落由一个或多个Run
对象组成。段落是文档的基本构成单位,可以包含文本
、格式设置
等。 - Run(内容对象):
Run
对象是具有相同格式设置的文本片段
。当文本样式发生变化时,如字体
、大小
或颜色
的改变,就会创建一个新的 Run 对象。
读取Word文档
打开并读取文档段落
from docx import Document
# 打开文档
doc = Document('word-1.docx')
# 遍历段落
for para in doc.paragraphs:
print(para.text)
# 输出:
# 我是文档标题
# 我是段落1,段落1,段落1
# 我是段落2,段落2,段落2
# 我是段落3,段落3,段落3
读取Run内容
# 遍历Run内容
for para in doc.paragraphs:
for run in para.runs:
print(run.text)
# 输出:
# 我是文档标题
# 我是段落1,
# 段落1,
# 段落1
# 我是段落2,
# 段落2,
# 段落2
# 我是段落3,
# 段落3,
# 段落3
提取元数据
Word 文档包含元数据,如作者
、标题
等。
# 提取文档属性
core_properties = doc.core_properties
print("作者:", core_properties.author)
print("标题:", core_properties.title)
# 作者: 晨羽
# 标题:
写入Word文档
创建并写入文档
创建新的 Word
文档,写入段落和 Run
内容,保存文档。
from docx import Document
# 创建文档实例
doc = Document()
# 添加标题
doc.add_heading('这是一个标题', level=1)
# 添加段落
p = doc.add_paragraph('这是一个段落。')
# 添加Run内容
run = p.add_run('段落的内容1')
# 保存文档
doc.save('word-2.docx')
设置文本格式
from docx.shared import Pt, RGBColor
# ...其他代码
# 设置字体大小 颜色 加粗 斜体
run.font.size = Pt(16)
run.font.color.rgb = RGBColor(255, 0, 0)
run.font.bold = True
run.font.italic = True
生成后 word-2.docx
文件如下图:
段落处理
创建和修改段落
使用 add_paragraph
方法在文档中添加新段落,修改段落文本可以使用 text
属性。
# ...其他代码
# 添加段落
p = doc.add_paragraph('这是一个新段落。')
p1 = doc.add_paragraph('段落1段落1段落1。')
p2 = doc.add_paragraph('段落2段落2段落2。')
p3 = doc.add_paragraph('段落3段落3段落3。')
# 修改段落文本
p.text = '这是修改后的段落文本。'
设置对齐方式
使用 paragraph.alignment
属性设置对齐方式,可选值有:
- 左对齐:
WD_PARAGRAPH_ALIGNMENT.LEFT
- 居中对齐:
WD_PARAGRAPH_ALIGNMENT.CENTER
- 右对齐:
WD_PARAGRAPH_ALIGNMENT.RIGHT
- 俩端对齐:
WD_PARAGRAPH_ALIGNMENT.JUSTIFY
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
# ...其他代码
# 设置段落对齐方式: 居中
p.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
段落缩进
缩进格式如下:
- 首行缩减:使用
paragraph_format.first_line_indent
- 悬挂缩进:使用
paragraph_format.hanging_indent
- 左缩进:使用
paragraph_format.left_indent
- 右缩进:使用
paragraph_format.right_indent
from docx.shared import Inches, Pt
# ...其他代码
# 设置缩进
# 首行缩进0.5英寸
p2.paragraph_format.first_line_indent = Inches(0.5)
# 左缩进1英寸
p3.paragraph_format.left_indent = Inches(1)
管理段落样式
创建自定义样式并应用到段落:
from docx.enum.style import WD_STYLE_TYPE
# ...其他代码
style = doc.styles.add_style('My Style', WD_STYLE_TYPE.PARAGRAPH)
style.base_style = doc.styles['Normal']
style.font.size = Pt(14)
style.paragraph_format.space_after = Pt(6)
p.style = style
生成后 word-3.docx
文件如下图:
Run内容操作
添加和修改Run内容
使用 add_run
方法在段落末尾添加一个新的 Run
内容,修改 Run
内容可以使用 text
属性,设置字体内容使用 font
属性。
#...其他代码
from docx import Document
from docx.shared import Pt, RGBColor
# 创建文档实例
doc = Document()
# 添加段落
p = doc.add_paragraph('这是一个段落。')
# 添加Run内容
run = p.add_run('段落的内容1')
# 替换Run
run.text = ',替换后的Run文本,'
# 设置字体大小 颜色 加粗 斜体
run.font.size = Pt(16)
run.font.color.rgb = RGBColor(255, 0, 0)
run.font.bold = True
run.font.italic = True
# 保存文档
doc.save('word-4.docx')
插入和删除Run内容
使用 insert_paragraph_before
在段落中的特定位置插入 Run
内容,使用 clear
方法删除 Run
内容。
# 插入Run
run1 = p.insert_paragraph_before('在前面插入的Run文本')
# 删除Run
run1.clear()
生成后 word-4.docx
文件如下图:
表格处理
创建表格
使用 add_table
方法在文档中添加表格。
from docx import Document
# 创建文档实例
doc = Document()
# 创建表格
table = doc.add_table(rows=2, cols=2)
# 添加内容
row = table.rows[0]
row.cells[0].text = '姓名'
row.cells[1].text = '年龄'
row = table.rows[1]
row.cells[0].text = '张三'
row.cells[1].text = '18'
# 保存文档
doc.save('word-5.docx')
添加和删除行、列
# 添加表格行
row = table.add_row()
row.cells[0].text = '李四'
row.cells[1].text = '20'
# 删除第一行
# row._element.getparent().remove(row._element)
# row._tcPr = None # 清除引用
# 添加列
table.add_column(width=1000000) # 宽度单位为EMU(English Metric Units)
table.rows[0].cells[2].text = '性别'
# 删除列
# for row in table.rows:
# cell = row.cells[-1]
# cell._element.getparent().remove(cell._element)
# del cell
合并单元格
# 合并单元格
table.cell(1, 2).merge(table.cell(2, 2))
table.cell(1, 2).text = '男'
生成后 word-5.docx
文件如下图:
图片插入
使用 add_picture
方法插入图片。需要提供图片的路径和图片的宽度和高度:
from docx import Document
from docx.shared import Inches
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
# 创建文档实例
doc = Document()
# 创建段落
p = doc.add_paragraph()
run = p.add_run()
# 插入图片
run.add_picture('img1.jpeg', width=Inches(3), height=Inches(2))
# 调整图片位置
p.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 居中对齐
# 保存文档
doc.save('word-6.docx')
生成后 word-6.docx
文件如下图:
插入页眉和页脚
- 使用
section
对象的header
属性来访问或创建页眉
。 - 使用
section
对象的footer
属性来访问或创建页脚
。
from docx import Document
# 创建文档实例
doc = Document()
# 添加页眉
header = doc.sections[0].header
header_paragraph = header.paragraphs[0]
header_run = header_paragraph.add_run('这是页眉')
# 添加页脚
footer = doc.sections[0].footer
footer_paragraph = footer.paragraphs[0]
footer_run = footer_paragraph.add_run('这是页脚')
# 保存文档
doc.save('word-7.docx')
生成后 word-7.docx
文件如下图:
python学习专栏系列
- python学习-基础学习1
- python学习-基础学习2
- python学习-基础学习3
- python学习-面向对象编程1
- python学习-面向对象编程2
- python学习-文件读写
- python学习-程序异常处理
- python学习-正则
- python学习-处理word文档
- python学习-处理pdf文档
- python学习-处理excel文档
- python学习-处理csv文档
- python学习-使用matplotlib绘制图表
- python学习-处理JSON数据
- python学习-SQLite数据库
- python学习-多线程处理
- python学习-网络爬虫