前言
在处理大量 Word 文档时,我们经常需要在每个文档的开头插入文件名,以便于后续的归档和检索。手动执行这项任务既耗时又容易出错。本文将介绍如何使用 Python 和 python-docx 库自动化这个过程。
准备工作
在开始之前,请确保您的 Python 环境中已经安装了 python-docx 库。如果尚未安装,可以使用以下命令进行安装:
pip install python-docx
解决方案概述
我们的目标是编写一个 Python 脚本,遍历指定文件夹中的所有 .docx 文件,并在每个文件的开头插入一个带有文件名和索引的新段落。
实现步骤
1. 导入必要的库
首先,我们需要导入处理文件和目录的 os 模块,以及用于操作 .docx 文件的 Document 类。
import os
from docx import Document
2. 定义插入文件名的函数
我们定义一个函数 insert_filename_to_docx,它接受一个文件夹路径作为参数,并在该文件夹中的每个 .docx 文件的开头插入文件名和索引。
def insert_filename_to_docx(folder_path):
# 获取文件夹中的所有文件名
files = [f for f in os.listdir(folder_path) if f.endswith(".docx")]
for index, file in enumerate(files, start=1):
file_path = os.path.join(folder_path, file)
# 打开Word文档
doc = Document(file_path)
# 获取文件名(不包括扩展名)
file_name = os.path.splitext(file)[0]
# 生成索引文件名
indexed_file_name = f"第{index}篇 《{file_name}》"
# 检查是否已经插入该段落
if not any(paragraph.text.startswith(f"第{index}篇") for paragraph in doc.paragraphs):
# 在文档的开头插入文件名
doc.paragraphs[0].insert_paragraph_before(indexed_file_name)
# 保存修改后的文档
doc.save(file_path)
print(f"Inserted filename into {file}")
else:
print(f"Skipped {file} (already contains the indexed filename)")
3. 指定文件夹路径并调用函数
最后,我们指定存放 .docx 文件的文件夹路径,并调用 insert_filename_to_docx 函数。
# 指定Word文档所在的文件夹路径
folder_path = "./data/sh_business_guides"
insert_filename_to_docx(folder_path)
4. 完整代码
将上述代码组合在一起,就是我们完整的 Python 脚本:
import os
from docx import Document
def insert_filename_to_docx(folder_path):
# 获取文件夹中的所有文件名
files = [f for f in os.listdir(folder_path) if f.endswith(".docx")]
for index, file in enumerate(files, start=1):
file_path = os.path.join(folder_path, file)
# 打开Word文档
doc = Document(file_path)
# 获取文件名(不包括扩展名)
file_name = os.path.splitext(file)[0]
# 生成索引文件名
indexed_file_name = f"第{index}篇 《{file_name}》"
# 检查是否已经插入该段落
if not any(paragraph.text.startswith(f"第{index}篇") for paragraph in doc.paragraphs):
# 在文档的开头插入文件名
doc.paragraphs[0].insert_paragraph_before(indexed_file_name)
# 保存修改后的文档
doc.save(file_path)
print(f"Inserted filename into {file}")
else:
print(f"Skipped {file} (already contains the indexed filename)")
# 指定Word文档所在的文件夹路径
folder_path = "./data/sh_business_guides"
insert_filename_to_docx(folder_path)
运行脚本
将脚本保存为 insert_filename.py,然后在终端中运行:
python insert_filename.py