目录
1.前言
当一篇几万字的Word文档中存在很多的错别字又或者是我们需要去对某个词段进行替换,这个时候如果一个一个的去查找是相当费时费力的,看看怎么使用Python来高效的解决这个问题
2.需求
这里有一个文本库Word,用它来充当要被修改的文件
下面一张用来对比错误点的勘误表,里面记录了需要被修改的字段以及替换字段
现在需要写一段代码来实现Word文本中的文字替换
3.解决思路
先打开两个文件,获取文件对象
# 导入模块
from docx import Document
from openpyxl import load_workbook
# 打开勘误表
wb=load_workbook('勘误表.xlsx')
ws=wb.active
doc=Document('文本库.docx')
遍历勘误表中的数据,提取出原词和替换词,每提取出一组词段就对整个Word文本的内容进行遍历,因为我们不知道Word文本中的文字是在run对象中还是在paragraph对象中,所以需要采用两种方式进行遍历
当从文本库中检索出来的词段和勘误表中的原词一致,就使用原词对应的替换词来进行替换,使用语法 str.replace(旧词,新词)
for row in ws.iter_rows(min_row=3,values_only=True):
old_code=row[0]
new_code=row[1]
# 通过run对象去检索修改
for p in doc.paragraphs:
for run in p.runs:
if old_code in run.text:
# replace函数可以实现用新词去替换掉旧词
run.text=run.text.replace(old_code,new_code)
# 通过段落对象去检索修改
for p2 in doc.paragraphs:
if old_code in p2.text:
p2.text=p2.text.replace(old_code,new_code)
替换完成之后保存文件
doc.save('新文本库.docx')
4.源代码
# 导入模块
from docx import Document
from openpyxl import load_workbook
# 打开勘误表
wb=load_workbook('勘误表.xlsx')
ws=wb.active
doc=Document('文本库.docx')
for row in ws.iter_rows(min_row=3,values_only=True):
old_code=row[0]
new_code=row[1]
# 通过run对象去检索修改
for p in doc.paragraphs:
for run in p.runs:
if old_code in run.text:
# replace函数可以实现用新词去替换掉旧词
run.text=run.text.replace(old_code,new_code)
# 通过段落对象去检索修改
for p2 in doc.paragraphs:
if old_code in p2.text:
p2.text=p2.text.replace(old_code,new_code)
doc.save('新文本库.docx')
在字段替换时也可以利用re正则表达式来实现
具体语法可以学习参考:正则表达式 – 语法 | 菜鸟教程 (runoob.com)