本站消息

站长简介/公众号


站长简介:高级软件工程师,曾在阿里云,每日优鲜从事全栈开发工作,利用周末时间开发出本站,欢迎关注我的微信公众号:程序员总部,程序员的家,探索程序员的人生之路!分享IT最新技术,关注行业最新动向,让你永不落伍。了解同行们的工资,生活工作中的酸甜苦辣,谋求程序员的最终出路!

  价值13000svip视频教程,python大神匠心打造,零基础python开发工程师视频教程全套,基础+进阶+项目实战,包含课件和源码

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2020-12(19)

2021-01(43)

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

发布于2021-10-18 00:23     阅读(502)     评论(0)     点赞(2)     收藏(0)



人生苦短,我用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)

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

原文链接:https://blog.csdn.net/oLianyou1/article/details/120758735







所属网站分类: 技术文章 > 博客

作者:众神之战

链接:https://www.pythonheidong.com/blog/article/1060712/b5a0cc30dadd441c65ec/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

2 0
收藏该文
已收藏

评论内容:(最多支持255个字符)