我们在实例7中批量生成了采购合同。但是假设现在我方的公司名由“ABC商贸有限公司”变成了“ABC贸易有限公司”,那我们就需要去每份合同中对应位置进行替换。当然也可以修改原始模板,然后重新生成合同。此处介绍一下如何使用Python批量替换多个Word文件中的文字,即将“商贸”替换为“贸易”。

我们先去到Word文件中,查找一下“商贸”这个词出现了多少次。下图可见,运气不错,只出现了两次,一次在正文的段落中,另一次在末尾的表格中,而且都是我们要替换的。

import docx

def info_update(doc,old_info, new_info):

'''此函数用于批量替换合同中需要替换的信息

doc:文件

old_info和new_info:原文字和需要替换的新文字

'''

#读取段落中的所有run,找到需替换的信息进行替换

for para in doc.paragraphs: #

for run in para.runs:

run.text = run.text.replace(old_info, new_info) #替换信息

#读取表格中的所有单元格,找到需替换的信息进行替换

for table in doc.tables:

for row in table.rows:

for cell in row.cells:

cell.text = cell.text.replace(old_info, new_info) #替换信息

我们上面直接借用实例7中定义好的用于替换文字的函数info_update。只需要向其中传入目标文件路径,待替换的词和新词即可。然后导入os库,获取目标文件及其路径,如下。import os #用于获取目标文件所在路径

path='data/' # 文件夹路径

files=[]

for file in os.listdir(path):

if file.endswith('.docx'): #排除文件夹内的其它干扰文件,只获取word文件

files.append(path+file)

files

>>

['data/公司001合同.docx',

'data/公司002合同.docx',

'data/公司003合同.docx',

'data/公司004合同.docx',

'data/公司005合同.docx',

'data/公司006合同.docx',

'data/公司007合同.docx',

'data/公司008合同.docx',

'data/公司009合同.docx',

'data/公司010合同.docx']

然后就可以开始进行批量替换操作了。可到文件夹“替换结果”中查看结果。

for file in files:

doc = docx.Document(file)

info_update(doc,'商贸', '贸易')

doc.save('data/替换结果/{}'.format(file.split('/')[-1]))

print('{}替换完成'.format(file))

>>

data/公司001合同.docx替换完成

data/公司002合同.docx替换完成

data/公司003合同.docx替换完成

data/公司004合同.docx替换完成

data/公司005合同.docx替换完成

data/公司006合同.docx替换完成

data/公司007合同.docx替换完成

data/公司008合同.docx替换完成

data/公司009合同.docx替换完成

data/公司010合同.docx替换完成

但如果另外的地方也出现了一次或多次“商贸”这个词,且是不能替换的呢?也有办法,我们可以指定替换的段落范围。比如我们故意在“特殊_含干扰词.docx”中间插入4个词“商贸”。这样,我们就有6个“商贸”在文档里了。

假设我们要替换第一、第三、第六个“商贸”为“贸易”,那我们要先确定出它们在那个段落,即对应paragraph的索引。由于第六个“商贸”在表格中,不在段落中,所以我们只需要找出第一、第三个所在的段落即可。#获取词'商贸'所在段落

import docx #导入docx库

doc = docx.Document('data/含干扰词/特殊_含干扰词.docx') #打开word文件

text=[]

for para in doc.paragraphs: #读取word中的每个段落

text.append(para.text)

print(len(text))

target_index=[]

for i in text:

if '商贸' in i:

target_index.append(text.index(i))

target_index

>>

77

[15, 26, 32, 38, 66]

以上,我们还是使用docx模块来读取目标word文件。我们需要知道包含“商贸”一词所在段落,就需要知道其索引。但是我在docx模块中未找到索引相关的函数,因此这里使用了一个变通的方法。即新建一个空列表text,然后将word文档中的所有段落对应的文本提取并存入这个列表。列表是可以使用索引函数的,而列表里面元素的索引正好对应段落的索引。所以只要找到“商贸”一词在列表text中的索引,也就找到了其在段落paragraph中的索引。通过len(text)可知共有77个段落。

然后再新建一个空列表target_index,用于存储包含“商贸”一词的字符串在列表text中的索引。使用for循环遍历列表text中的所有元素,通过if语句判断其中是否包含“商贸”字符,如果包含,则将这个元素对应的索引text.index(i)存入列表target_index。通过结果,可见找到5处含有“商贸”字符串,索引分别为15, 26, 32, 38, 66。

为了验证是否准确,我们可以打印看一下相应索引对应的段落是否真的包含“商贸”一词。如下打印结果显示,结果很理想。

for j in target_index:

print(doc.paragraphs[j].text)

>>

乙方:ABC商贸有限责任公司

1.交货方法:由乙方送货(国家主管部门规定有送货办法的,按规定的办法执行;没有规定送货办法的,按双方协议执行);商贸

1.所有货物由乙方送到交货地点且甲方确认收货后5天内,由甲乙双方共同对货物的包装、外观、数量、商标、型号、规格及性能

等进行验收,签署检验报告。如乙方未按约定到甲方指定地点参加检验的,应视为乙方对甲方单方检验的结果予以确认。验收标准

执行合同规定的货物质量标准。商贸

总价指甲方的交货价格,该价格应包含货物价格、通关费、包装费、物流费、装卸费、保险费、在甲方指定场所的安装调试费、

必要的培训费以及增值税等一切费用。在乙方完全履行本合同下全部义务的情形下,除非另有书面约定,否则合同金额是甲方应

当向乙方支付的全部费用 。商贸

本合同自双方法定代表人或委托代理人签字盖章后生效,至合同条款履行完毕时终止。商贸

因为我们只替换第一、第三、第六个“商贸”为“贸易”,而第六个在表格中。所以需要改一下原来的替换函数info_update,命名为新的函数info_update_new,我们在函数内指定只替换段落15和32中的目标词,表格中的目标词也继续替换。import docx

def info_update_new(doc,old_info, new_info):

'''此函数用于批量替换合同中需要替换的信息

doc:文件

old_info和new_info:原文字和需要替换的新文字

'''

#读取段落中的所有run,找到需替换的信息进行替换

for i in [15,32]:

para=doc.paragraphs[i]

for run in para.runs:

run.text = run.text.replace(old_info, new_info) #替换信息

#读取表格中的所有单元格,找到需替换的信息进行替换

for table in doc.tables:

for row in table.rows:

for cell in row.cells:

cell.text = cell.text.replace(old_info, new_info) #替换信息

import os #用于获取目标文件所在路径

path='data/含干扰词/' # 文件夹路径

files=[]

for file in os.listdir(path):

if file.endswith('.docx'): #排除文件夹内的其它干扰文件,只获取word文件

files.append(path+file)

for file in files:

doc = docx.Document(file)

info_update_new(doc,'商贸', '贸易')

doc.save('data/替换结果/{}'.format(file.split('/')[-1]))

print('{}替换完成'.format(file))

>>

data/含干扰词/特殊_含干扰词.docx替换完成

调用新的替换函数info_update_new,将结果也保存到文件夹“data/替换结果”内。

结果如下,可见在完成替换后的文件中,词“商贸”和“贸易”各有3个,只有我们指定位置的词被替换掉了。

所有源代码和说明都在Jupyter notebook上完成,所用到的Excel 资料已上传GitHub, 欢迎Fork或下载到本地随意玩。。。转载请注明出处,谢谢。

GitHub链接:

https://github.com/weidylan/Office_Automation_by_Using_Python

知乎专栏:https://zhuanlan.zhihu.com/c_1093482152993316864

word批量替换多组文字 python_实例14:用Python批量替换多个Word文件中的文字相关推荐

  1. python文本筛选多个word_用Python批量替换多个Word文件中的文字

    实例14:用Python批量替换多个Word文件中的文字 公众号"Python操作Office软件高效工作" 29 人赞同了该文章 我们在实例7中批量生成了采购合同.但是假设现在我 ...

  2. 批量提取 srt 字幕文件中的文字

    概要:相信经常与视频处理打交道的小伙伴对字幕文件一定不陌生.字幕文件一般来说会包含字幕序号.播放时间轴与具体的字幕内容,经常用于在视频播放的时候在对应的时间显示相应的字幕内容.字幕文件通常会有多种类型 ...

  3. 如何快速批量删除PDF文件中的文字 - PDF文字删除器

    在日常工作中,你可能经常会发现有一些PDF文件有错误的文字需要删除,或是重要的文字不能被显示.由于PDF是一个虚拟打印的文件格式,逐一在每个PDF文件上删除这些错误文字或重要文本可能会非常麻烦和复杂. ...

  4. pdf拼版插件_pdf文件中的文字批量转曲的办法

    如果PDF格式文件仅仅用于传阅,文件件中的文字转不转曲不会有多大区别,不会影响阅读.但是如果文件用于印刷,从一个电脑传送到另外一台电脑上后,对方电脑中没有pdf文件中所使用的字体,这时对方打开pdf文 ...

  5. 怎么修改PDF文件中的文字

    怎么修改PDF文件中的文字 最初PDF只被看作是一种页面预览格式,而不是生产格式.然而市场的感觉并非如此,市场期望转化了这种格式的焦点,从而也改变了该产品.各种各样的电子书阅读器充斥着国内外市场,已经 ...

  6. PDF如何编辑,怎么编辑PDF文件中的文字

    越来越多的小伙伴会私信小编询问小编关于PDF文件的修改技巧,在使用PDF文件的时候,往往是需要用到PDF编辑器的,编辑文件时,想要修改文件的内容,应该怎么去编辑呢,其实,还是很简单的,不会的小伙伴可以 ...

  7. pdf exe如何提取pdf文件_python应用:如何用python提取pdf文件中的文字

    从pdf中提取文字,相信很多人都干过这事,怎么在python中实现呢,今天带大家看看. 第一步导入库 import PyPDF2 第二步导入pdf文件 pdf_file =open('dataset/ ...

  8. java基础IO流使用读取一个文件中的文字输出到控制台上

    读取一个文件中的文字输出到控制台上 import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IO ...

  9. vscode中打开pdf文件_提取pdf文件中的文字

    环境说明 windows10系统 python3.6版本 安装 网上很多说需要安装pdfminer3k和pdfminer3k.six,我尝试了先安装pdfminer3k后安装pdfminer3k.si ...

最新文章

  1. 用XCA(X Certificate and key management)可视化程序管理SSL 证书(3)--创建自己定义的凭证管理中心(Certificate Authority)...
  2. 巨坑 之 pip install 和 conda install 的区别 以及 查看 和 修改 虚拟环境下运行路径
  3. jboss5.1安全性配置_使用Java EE安全性和JBoss AS 7.x保护JSF应用程序的安全
  4. 为什么NTFS删除超过4G大文件或数据库文件后FILE RECORD大小表现为0
  5. word插入visio图显示不完全
  6. 图像处理九:拟合曲线
  7. 阿里云云计算 26 SLB的配置
  8. [论文阅读][CVPR2021]EventZoom: Learning to Denoise and Super Resolve Neuromorphic Events
  9. Threshold函数详解
  10. AWS新用户入门学习必备知识
  11. Ubuntu Linux全方位学习,哪一种Ubuntu官方版本适合你?
  12. Comparing Mongo DB and Couch DB
  13. node 暴漏模块中的api(转自了不起的node)
  14. 【怎么制作PPT】Focusky教程 | 设置画面显示比例
  15. 驱动开发笔记1—内核中的事件、进程、线程、自旋锁
  16. Photoshop中出现“要求96和8之间的整数。已插入最接近的数值”解决方法
  17. redis 集群 哨兵
  18. rabbitMQ guest账号登录总是提示失败
  19. idea 离线安装translation 谷歌翻译
  20. python 依据某几列累加求和_如何用Python找出PSY超卖的股票?

热门文章

  1. 毕设springBoot+vue 在线音乐网站系统(含源码+论文)
  2. hive学习笔记10
  3. Android 字体没效果,AndroidX 自定义字体不生效
  4. IOS iPhone开发中发送e-mail的3种方式
  5. c语言中switch用法举例
  6. 从技术角度分析“抢票软件的加速”,真有多快?
  7. ElasticSearch之ICU分词器
  8. 2022-2027年中国手机饰品市场规模现状及投资规划建议报告
  9. 用Python 学一段 将图片转换成简笔画的代码
  10. OpenCv人脸贴画