本文面向 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 保存文档到文件")

