• 500个轻松处理,Python 自动化读写Word文档真香啊


    大家好,最近有同事需要批量出500Word文档,按照1个Word文档耗时1分钟来算也需要8.33小时足足有1天工时。于是,这位同事找到了我帮忙,接过需求花了不到30分钟写好脚本,运行脚本不到1分钟就生成了500份Word文档并且进行了分类归档!

    这就是Python的魅力,让工作更轻松!喜欢记得收藏、关注、点赞。

    完整版代码、技术交流,文末获取

    今天,我们就来了解一下用Python读写Word文档。未来,我将再出两期进行补充介绍,一篇是批量生成Word文档的方法(也就是我搞定同事需求的案例),另外一篇是详解Python写Word(包含可能你都不知道的各种Word格式),敬请期待哈~

    目录:

    • 1. 安装模块

    • 2. 读取Word文档

    • 3. 写入Word文档

    1. 安装模块

    这里我们用到的是python-docx模块,读写Word文档的操作均有它完成!

    # 安装该模块,在命令行键入以下命令
    pip install python-docx
    
    • 1
    • 2

    在进行后续介绍前,我们先简单了解一下Word文档。和纯文本(比如txt)相比, .docx文件有很多种结构,这些结构在python-docx中用3种不同的类型来表示:最高一层是Document对象表示文档,每个Document对象包含一个Paragraph 对象也就是段落组成的列表,而每个Paragraph对象则包含一个Run对象的列表,至于Run对象大家可以通过下面的段落Paragraph来了解。

    图片

    多个Run对象组成的Paragraph

    我们知道Word里的文本包含有很多格式,比如字体、字号、粗体/斜体、颜色等等。一个Run对象是具有相同格式的文本,当发生变化的时候就需要一个新的Run对象,这也就是上图中1个Paragraph对象有4个Run对象的原因。

    理解以上知识后,我们再来了解读与写吧。

    2. 读取Word文档

    我们本地创建一个案例文档,用于演示读取Word,案例文档内容如下:
    图片

    案例.docx

    可以看到文档一共有四行,两行标题以及两行正文。

    import docx
    # 读取Word文档
    doc = docx.Document(r'案例.docx')
    
    • 1
    • 2
    • 3

    图片

    我们知道了读取Word每个paragraph段落和Run,那么如何读取完整的Word文本内容呢?这里,自定义一个函数将全部的paragraph段落内容存起来,每个paragraph段落之间用换行符\n隔开即可。

    import docx
    
    def getText(fileName):
        doc = docx.Document(fileName)
        TextList = []
        for paragraph in doc.paragraphs:
            TextList.append(paragraph.text)
        
        return '\n'.join(TextList)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    我们调用该函数,可以得到:

    fileName = r'案例.docx'
    print(getText(fileName))
    
    • 1
    • 2
    标题1
    这是一个段落,有粗体和斜体
    大家好,我是才哥。
    标题2
    
    • 1
    • 2
    • 3
    • 4

    当然了,这里读取后输出显示的文本不带有格式属性哈。

    3. 写入Word文档

    在写入Word之前,我们先简单了解下Word的一些格式规则。

    毫不夸张的讲,把全局样式玩的明白的人蛮少的。这方面主要是正文样式与标题样式,如果玩得明白的话,其实设置好了之后几乎不需要再进行啥调整,全局格式都能自动设置与更新。就我所见的大多数朋友的文档,这方面基本达不到。(感觉会被爆锤~~)

    图片

    全局样式

    比如,我们可以设置正文样式为 微软雅黑字体,字号12,缩进,间距等等;设置标题样式为 微软雅黑字体,字号14,删除段落后间距等等。

    在我们Python处理Word的时候,段落样式可以应用于 Paragraph 对象,字符样式可以应用于 Run 对象,链接的样式可以应用于这两种对象。可以将 ParagraphRun 对象的 style 属性设置为一个字符串,从而设置样式。这个字符串应该是一种样式的名称。如果 style 被设置为 None,就没有样式与 ParagraphRun 对象关联。

    当然,这里我们不展开介绍,就简单介绍Run对象上的字符属性。关于更多的介绍,我们放在第三期的 详解Python写Word里

    对于Run对象的字符text属性,都有3个状态:True(启用)、False(禁用)和None(默认)。

    text属性有哪些?看下表:

    属性描述
    bold文本以粗体出现
    italic文本以斜体出现
    underline文本带下划线
    strike文本带删除线
    double_strike文本带双删除线
    all_caps文本以大写首字母出现
    small_caps文本以大写首字母出现,小写字母小两个点
    shadow文本带阴影
    outline文本以轮廓线出现,而不是实心
    rtl文本从右至左书写
    imprint文本以刻入页面的方式出现
    emboss文本以凸出页面的方式出现

    我们演示一下:

    图片

    图片

    调整样式

    以上就是对段落的一些简单介绍及演示,接下来,我们来看看怎么创建并写入Word

    要创建自己的.docx 文件,就调用 docx.Document(),返回一个新的、空白的 Word Document 对象 。Document 对象的 add_paragraph()方法将一段新文本添加到文档中,并返回添加的 Paragraph 对象的引用。在添加完文本之后,向 Document 对象的 save()方法传入一个文件名字符串,将 Document 对象保存到文件。

    import docx
    
    doc = docx.Document()
    doc.add_paragraph('这是一个段落')
    doc.save('写入word.docx')
    
    • 1
    • 2
    • 3
    • 4
    • 5

    图片

    写入word

    我们可以添加段落、设置段落文本样式等等,比如:

    import docx
    
    doc = docx.Document()
    p1 = doc.add_paragraph('这是一个段落')
    p1.add_run('加粗的一句话').bold = True
    doc.add_paragraph('这是第二个段落')
    doc.save('多段落.docx')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    图片

    多段落

    我们还可以添加一个段位,这个段落为标题样式,这里需要用到add_heading()。它有两个参数,字符串表示文本内容,后面数字是标题层级。

    import docx
    
    doc = docx.Document()
    doc.add_heading('标题',0)
    doc.add_heading('标题1',1)
    doc.add_heading('标题2',2)
    doc.add_heading('标题3',3)
    doc.add_heading('标题4',4)
    doc.save('标题.docx')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    图片

    标题

    同样,我们还可换行与换页操作。

    要添加换行符(而不是开始一个新的段落),可以在 Run 对象上调用 add_break()方法,换行符将出现在它后面。如果希望添加换页符,可以将 docx.text.WD_BREAK.PAGE作为唯一的参数,传递给 add_break()

    import docx
    
    doc = docx.Document()
    p1 = doc.add_paragraph('这是一个段落')
    p1.add_run('加粗的一句话').bold = True
    # 换行
    doc.paragraphs[0].runs[0].add_break()
    doc.save('换行.docx')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    图片

    换行

    有人会说,一般word里还有图片嘛,当然咱们也能搞定添加图片

    有一个 add_picture()方法,可以在段落末尾添加图像 。

    import docx
    
    doc = docx.Document()
    doc.add_paragraph('这是一个段落,后面带图片')
    doc.add_picture('图片.png', 
                    width=docx.shared.Inches(3),
                    height=docx.shared.Cm(4))
    doc.add_paragraph('这是第二个段落')
    doc.save('图片.docx')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    图片

    添加图片

    以上就是本次的简单入门介绍。

    其实Word文档各种样式设置,数据类型展示等等非常丰富,而Python-docx这个模块其实也能进行大多数的处理。不过,日常中我们用到的功能也没那么多,此部分留作后续详情讲解哈。

    万水千山总是情,点个 👍 行不行

    推荐文章

    技术交流

    欢迎转载、收藏、有所收获点赞支持一下!数据、代码可以找我获取

    在这里插入图片描述

    目前开通了技术交流群,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友

    • 方式①、发送如下图片至微信,长按识别,后台回复:加群;
    • 方式②、添加微信号:dkl88191,备注:来自CSDN
    • 方式③、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

    长按关注

  • 相关阅读:
    C++ day2
    贝加莱使用教程1-创建X20工程和点亮LED灯
    使用Puppeteer构建博客内容的自动标签生成器
    当区块链背离了它的技术本质,其充当的就只是一个概念的外衣而已
    第八章:动态内存申请
    驱动开发:配置Visual Studio驱动开发环境
    【报错】cannot import name ‘DistanceMetric‘ from ‘sklearn.metrics‘
    JAVA毕业设计web二手交易平台计算机源码+lw文档+系统+调试部署+数据库
    sql注入-布尔盲注
    什么是用户体验测试? 为什么很重要?
  • 原文地址:https://blog.csdn.net/weixin_38037405/article/details/125694199