栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

使用python替换word文档部分内容

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用python替换word文档部分内容

人生苦短,我用python。

工具

这里我们使用python-docx库, 关于这个库的使用可以参考官方文档

使用
  • 第一种:如果不在乎原有文章的格式,比如把word文档里的需要替换的字符串替换成我是替换后的字符串可以使用以下代码
      doc = docx.document('test.docx')
      for paragraph in doc.paragraphs:
          if '需要替换的字符串' in p.text:
              p.text = p.text.replace('需要替换的字符串', '我是替换后的字符串')
      doc.save('result_test.docx')
    
    这种替换方式有个问题就是,不能保持原有的格式, 比如需要替换的字符串是带下划线并、加粗、黑体,替换之后这些格式都不存在了,但这也是最简单部分的替换方式。
  • 第二种: 既然第一种有问题,那么我们想要保持原有的文档格式,怎么办?我们只能更改里面的文字块,再python-docx库中文字块叫run,特殊就是这个run并不是我们我们想象的那样是连续的,这里盗了个图,这里感谢这位博主的图。

从图中可以看出,run是paragraph的最小单元,所以待会儿取得时候我们只能拿到段落我们才能找到run,再说run得特殊性, 比如需要替换的字符串这几个字可能是多个run, 可能是两个run,分别是’需要替换的’, ‘字符串’。直接上代码:

doc = docx.document('my_template.docx')
for paragraph in doc.paragraphs:
    tmp = ''
    runs = paragraph.runs
    for i, run in enumerate(runs):
        tmp += run.text # 合并run字符串
        if '需要替换的字符串' in tmp:
            # 如果存在匹配得字符串,那么将当前得run替换成合并后得字符串
            run.text = run.text.replace(run.text, tmp)
            run.text = run.text.replace('需要替换的字符串', '我是替换后的字符串')
            tmp = ''
        else:
            # 如果没匹配到目标字符串则把当前run置空
            run.text = run.text.replace(run.text, '')
        if i == len(runs) - 1:
            # 如果是当前段落一直没有符合规则得字符串直接将当前run替换为tmp
            run.text = run.text.replace(run.text, tmp)

以上就是两种替换方式,可以看需求使用

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/326931.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号