学习Python:基于python-docx库生成word文档

本文面向 python 零基础学员,详细讲解如何使用 python-docx 库 , 遍历 DataFrame 数据并生成格式化的 Word 文档 , 为 《财务大数据分析(基于 python )》 p283 输出 word 部分 的学习辅导读物。适用场景如 将采集到投资者互动关系问答输出到 WORD 文档 。

学习目标:

理解 DataFrame 的遍历方法

掌握 python-docx 库的基本操作

学会设置字体样式(大小、颜色)

理解循环结构在数据处理中的应用

第一部分:环境准备与库导入

【知识点 1 】库的安装与导入

python-docx 是一个用于创建和修改 Word 文档 (.docx) 的 Python 库。

安装命令(在命令行 / 终端中执行): pip install python-docx

或者使用国内镜像源加速安装:

pip install python-docx -i https://pypi.tuna.tsinghua.edu.cn/simple

安装完毕之后,再导入库,所以,多数的 python 代码第一部分均是导入库,相当于导入我们将使用的工具。如下:

from docx import Document # 导入Document类,用于创建Word文档from docx.shared import Pt, RGBColor # 导入字体大小和颜色设置工具import pandas as pd # 导入pandas,用于数据处理

第二部分:理解核心数据结构 —— DataFrame

【知识点 2 】什么是 DataFrame ?

DataFrame 是 pandas 库中最核心的数据结构,可以理解为一个二维表格,类似于 Excel 中的工作表或数据库中的数据表。 DataFrame 的结构如下:

行( index ):每一条记录的编号

列( columns ):每个字段的名称

值( values ):具体的数据内容

实际项目中, DataFrame 数据一般来自数据库查询结果、 API 接口返回的 JSON 数据、 Excel/CSV 文件读取。我们也可以使用 pd.DataFrame 将字典转换为 DataFrame 。如:

stock_irm_cninfo_df = pd.DataFrame(data)

第三部分:创建 Word 文档基础

【知识点 3 】 Document 对象—— Word 文档的载体

Document 类是 python-docx 库的核心,代表一个 Word 文档。创建 Document 对象即创建一个新的空白 Word 文档。常用方法如下:

doc.add_paragraph #添加一个新段落doc.add_heading #添加标题doc.add_table #添加表格doc.save #保存文档到文件

以下代码可以牢记,至少应该是能看懂。

# 创建一个新的Word文档对象doc = Document# 添加文档标题title = doc.add_heading('投资者关系问答记录', level=0)# 添加说明段落intro = doc.add_paragraphintro.add_run('本文档由Python自动生成,记录了公司与投资者的互动问答内容。')# 添加空行分隔doc.add_paragraph

第四部分:核心代码详解 ——遍历 DataFrame 并写入文档

【知识点 4 】 DataFrame 的遍历方法—— iterrows

iterrows 是 DataFrame 的行迭代器,每次循环返回两个值:

index: 当前行的索引号(从 0 开始)

row: 当前行的数据( Series 类型,可通过列名访问值)

语法格式:

for index, row in dataframe.iterrows:# index: 行号# row['列名'], 获取该列的值

【知识点 5 】 python-docx 的段落和文本样式设置

1. 添加段落:

p = doc.add_paragraph # 创建空段落

2. 添加文本( Run 对象):

run = p.add_run('文本内容') # 在段落中添加文本

3. 设置字体大小:

run.font.size = Pt(12) # 设置字号为12磅(小四号)

常用字号对照:

– Pt(10.5) = 五号字

– Pt(12) = 小四号字

– Pt(14) = 四号字

– Pt(16) = 小三号字

– Pt(18) = 三号字

4. 设置字体颜色:

run.font.color.rgb = RGBColor( 红 , 绿 , 蓝 )

RGB 颜色模型:

– RGBColor(0, 0, 0) = 黑色

– RGBColor(255, 0, 0) = 红色

– RGBColor(0, 0, 255) = 蓝色

– RGBColor(128, 128, 128) = 灰色

每个颜色通道取值范围: 0-255

# 遍历问题和回答并添加到文档中for index, row in stock_irm_cninfo_df.iterrows:# ------------------- 打印当前处理进度(便于理解) -------------------print(f"
正在处理第 {index + 1 } 条记录...")print(f" 提问时间: {row['提问时间']}")

【代码详解】

p = doc.add_paragraph

解释:调用 Document 对象的 add_paragraph 方法,创建一个新的空白段落。 返回的 p 是一个 Paragraph 对象,代表这个段落。

run = p.add_run(f” 时间 : {row[' 提问时间 ']}”)

解释:在段落 p 中添加文本。 f” 时间 : {row[' 提问时间 ']}” 是 Python 的 f-string 格式化字符串; row[' 提问时间 '] 从当前行数据中获取 ” 提问时间 ” 列的值,最终文本如: ” 时间 : 2024-01-15″ ; run 是一个 Run 对象,代表一段具有一样样式的文本。

run.font.size = Pt(12)

解释:设置 run 对象(即这段文本)的字体大小为 12 磅。 Pt 是 python-docx 中用于表明磅值的单位类。

run.font.color.rgb = RGBColor(0, 0, 0)

解释:设置文本颜色为纯黑色。 RGBColor(0, 0, 0) 表明红色 =0 、绿色 =0 、蓝色 =0 ,即黑色。

p = doc.add_paragraphrun = p.add_run(f"时间: {row['提问时间']}")run.font.size = Pt(12) # 设置字体大小为12磅run.font.color.rgb = RGBColor(0, 0, 0) # 设置字体颜色为黑色run.font.bold = True# 加粗显示(新增:增强可读性)

【拓展】使用不同颜色区分不同类型的内容

在实际应用中,我们常常用颜色来区分信息类型:

黑色:基本信息(时间、编号等)

蓝色:问题 / 提问内容

绿色:回答 / 回复内容

红色:重大提示或警告

p = doc.add_paragraphrun = p.add_run(f"提问: {row['提问内容']}")run.font.size = Pt(12)run.font.color.rgb = RGBColor(0, 0, 255) # 蓝色,表明提问

================== 添加回答内容(深绿色) ==================

p = doc.add_paragraphrun = p.add_run(f"回答: {row['回答内容']}")run.font.size = Pt(12)run.font.color.rgb = RGBColor(0, 128, 0) # 深绿色,表明回答

================== 添加回答时间(灰色) ==================

p = doc.add_paragraphrun = p.add_run(f"回复时间: {row['回答时间']}")run.font.size = Pt(10.5) # 稍小字号run.font.color.rgb = RGBColor(128, 128, 128) # 灰色,表明辅助信息run.font.italic = True# 斜体(新增)

================== 步骤 5 :添加分隔线 ==================

# 添加空行作为分隔doc.add_paragraph# 添加一条水平分隔线(使用下划线段落)separator = doc.add_paragraphseparator_run = separator.add_run("─" * 50)separator_run.font.color.rgb = RGBColor(200, 200, 200)separator_run.font.size = Pt(8)# 再添加一个空行doc.add_paragraph

第五部分:保存文档

【知识点 6 】保存文档

doc.save(' 文件名 .docx')

将内存中的 Document 对象保存为 .docx 文件

如果文件已存在,会被覆盖

保存路径可以是相对路径或绝对路径

# 保存文档output_filename = '投资者关系问答记录.docx'doc.save(output_filename)print(f"
文档已保存为: {output_filename}")print("
提示:请使用Microsoft Word或WPS打开查看效果。")

【进阶技巧】

1. 设置中文字体:

run.font.name = ' 微软雅黑 '

2. 设置段落间距:


p.paragraph_format.space_before = Pt(6) # 段前间距


p.paragraph_format.space_after = Pt(6) # 段后间距

3. 设置行距:


p.paragraph_format.line_spacing = 1.5 # 1.5 倍行距

4. 添加表格:

table = doc.add_table(rows=3, cols=2)

table.cell(0, 0).text = ' 项目 '

table.cell(0, 1).text = ' 内容 '

5. 添加页眉页脚:

header = doc.sections[0].header

header.paragraphs[0].text = ' 机密文件 '

【要点回顾】

print("
【学习要点回顾】")print("1. DataFrame.iterrows 用于逐行遍历表格数据")print("2. doc.add_paragraph 创建新段落")print("3. p.add_run 在段落中添加文本并设置样式")print("4. Pt 设置字体大小(磅值)")print("5. RGBColor 设置字体颜色(红绿蓝三通道)")print("6. doc.save 保存文档到文件")
© 版权声明

相关文章

1 条评论

none
暂无评论...