当前位置:首页>python>学习Python:基于python-docx库生成word文档

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

  • 2026-09-20 10:33:53
学习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_paragraph()intro.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"\n正在处理第 {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_paragraph()run = 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_paragraph()run = p.add_run(f"提问: {row['提问内容']}")run.font.size = Pt(12)run.font.color.rgb = RGBColor(0, 0, 255)  # 蓝色,表示提问

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

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

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

p = doc.add_paragraph()run = 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_paragraph()separator_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"\n文档已保存为: {output_filename}")print("\n提示:请使用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("\n【学习要点回顾】")print("1. DataFrame.iterrows() 用于逐行遍历表格数据")print("2. doc.add_paragraph() 创建新段落")print("3. p.add_run() 在段落中添加文本并设置样式")print("4. Pt() 设置字体大小(磅值)")print("5. RGBColor() 设置字体颜色(红绿蓝三通道)")print("6. doc.save() 保存文档到文件")

最新文章

随机文章