Python批量遍历文件夹处理docx文件并保存到新文件夹
批量处理DOCX文件:遍历筛选+文本替换+保存到新文件夹
先给你整理好的完整可运行代码:
import docx import os # 配置参数 source_dir = '.' # 源文件夹路径 target_dir = './newOrder' # 目标文件夹路径 extension = '.docx' # 替换规则(不要用dict做变量名,避免和内置类型冲突) replace_rules = { 'Don Steel': 'TAN', '5538AP': '5499AP', 'Special Mask Build Notes': 'Special Mask Build Notes: Special New receipts for TAN 4X to 5X' } # 确保目标文件夹存在,不存在则自动创建 os.makedirs(target_dir, exist_ok=True) def replacer(p, replace_dict): inline = p.runs for j in range(len(inline)): for k, v in replace_dict.items(): if k in inline[j].text: inline[j].text = inline[j].text.replace(k, v) return p # 遍历源文件夹,筛选并处理所有DOCX文件 for filename in os.listdir(source_dir): # 只处理后缀为docx的文件(排除文件夹) if os.path.isfile(os.path.join(source_dir, filename)) and filename.endswith(extension): # 拼接源文件完整路径 source_path = os.path.join(source_dir, filename) # 加载DOCX文件 doc = docx.Document(source_path) # 执行文本替换 for p in doc.paragraphs: p = replacer(p, replace_rules) # 拼接目标文件路径,保留原文件名 target_path = os.path.join(target_dir, filename) # 保存修改后的文件 doc.save(target_path) print(f"已处理完成:{target_path}")
关键修正与说明
1. 正确遍历筛选DOCX文件的语法
你原来的循环有语法错误,正确写法要注意:
- 变量名不要加引号,直接用
filename这类标识符 - 循环语句末尾必须加冒号
: - 要同时验证:遍历到的是文件(避免把文件夹误处理)+ 后缀是
.docx,用os.path.isfile()和endswith()组合判断 - 用
os.path.join()拼接路径,避免跨平台(Windows/Linux)的路径分隔符问题
2. 自动创建目标文件夹
如果newOrder文件夹不存在,直接保存文件会报错,用os.makedirs(target_dir, exist_ok=True)可以自动创建文件夹,exist_ok=True表示文件夹已存在时不会抛出错误。
3. 保留原文件名保存
直接用os.path.join(target_dir, filename)把原文件名拼到目标文件夹路径后,就能自动保留原文件名,不用手动逐个修改。
4. 其他小优化
- 删掉了没用的
text变量 - 把变量名
dict改成replace_rules,因为dict是Python内置类型的名称,用作变量名会覆盖内置类型,容易引发问题 - 简化了
range(0, len(inline))为range(len(inline)),效果完全一致 - 增加了打印提示,方便查看处理进度
内容的提问来源于stack exchange,提问作者linuxnewbie
相关产品推荐
相关产品推荐

