欢迎来到汇文网! | 帮助中心 汇文网——高品质阅读,高比例分成!
汇文网
全部分类
  • 标准规范>
    T-CBDA 中国建筑装 T-ZJX 中国建设劳动 T-CECS 土木工程协
    标准规范
    T-CBDA 中国建筑装饰协会标准 T-ZJX 中国建设劳动学会团体标准 T-CECS 土木工程协会标准 CECS 中国标准化协会标准 CECA 中国建设工程造价管理协会标准 CJJ 城镇建设行业标准 DB 地方标准 GB 国家标准 GBJ 国家工程建设标准 JGJ 建筑工程行业标准 规范汇编 建 标 JTG 公路规范 国标 GL 综合管廊 国标 J 建筑 国标 G 结构 国标 S 给水排水 国标 D 电气 国标 X 弱电 国标 R 动力 国标 K 通风、空调 国标 F 人防 国标 MS 市政给水排水 国标 MR 城市道路 国标 T 地铁工程 2009技术措施选用技术 西南地区图集 川 标 2015四川省清单计价定额、清单规范 房屋修缮工程消耗量定额 ZYA1-31-2015 市政工程消耗量定额 TY02-31-2015 通用安装工程消耗量定额 全国统一房屋修缮工程预算定额 建设工程劳动定额 电子建设工程预算定额 爆破工程消耗量定额 城市轨道交通工程预算定额 公路概预算定额 工具书 其他行业标准 征求意见
  • 商业-管理-人力资源>
    人事 商业计划书 规划战略管理
    商业-管理-人力资源
    人事 商业计划书 规划战略管理 宣传企划 市场营销 励志创业 调研分析 资本运营 合同协议 企业管理 经营策略 财务金融管理 规划 人事招聘求职 连锁招商加盟 财务 励志创业正能量 其他文档 连锁
  • 工程施组方案>
    主体施工方案 施组策划类 临时建筑
    工程施组方案
    主体施工方案 施组策划类 临时建筑 土方基础 地下结构施工方案 主体结构施工方案 垂直运输 测量及试验 装饰装修 室外附属 机电安装类 安全管理方案 拆除 专项施工方案 基坑支护与降水工程 土方开挖工程 模板工程工程 起重吊装工程 脚手架工程 拆除爆破工程 扬尘治理工程 其它
  • 办公-PPT-报告>
    文本-范本 制度办法 书籍
    办公-PPT-报告
    文本-范本 制度办法 书籍 事迹 致辞-演讲稿 活动策划 会议 模板-表格 感悟-读后感 行业资料 经验心得 感悟 报告 报告-汇报 书籍-图书 指南 文本 PPT模板库 应用程序 文案 模板 计划/总结 文案-方案 会议-来往文书 指南-手册 致辞 通知-申请 论文-学术研究 计划 论文 事迹-案例材料 其他办公资料 通知
  • 教育-教学专区>
    幼儿教育 小学教育 中学教育
    教育-教学专区
    幼儿教育 小学教育 中学教育 高等教育 考试试卷 小升初 考研托福雅思 作文作品 学习课件大全 班会备课教案 中考 高考 教学研究 班会 课程设计 教材辅导 考研 开题报告 毕业设计 辅导培训 实验设计 其他教学资料
  • 用Python批量替换多个Word文件中的文字

    2020-12-06 22:02 | 人气:254
    分享至:

    实例14:用Python批量替换多个Word文件中的文字

    实例14:用Python批量替换多个Word文件中的文字

    PythonOffice

    PythonOffice

    公众号“Python操作Office软件高效工作”

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


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

    import docxdef 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 docxdef 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个,只有我们指定位置的词被替换掉了。

    转自公众号:Python操作Office软件高效工作

    还可以输入500字符   

    暂无回复,赶快抢占沙发吧。

    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    侵权投诉客服QQ:2660337891点击这里给我发消息下载帮助客服QQ:2660337891点击这里给我发消息  
     汇文网版权所有  联系邮箱:5625523#qq.com (请把#改为@)  
      蜀ICP备18015944号-2 川公网安备 51050202000352号

    收起
    展开