51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 1020|回复: 0
打印 上一主题 下一主题

[python] 用Python自动化读写Word文档

[复制链接]
  • TA的每日心情
    擦汗
    9 小时前
  • 签到天数: 947 天

    连续签到: 6 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2022-10-26 11:41:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    1. 安装模块
      这里我们用到的是python-docx模块,读写Word文档的操作均有它完成!
    1. <font size="3"> # 安装该模块,在命令行键入以下命令

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

    我们知道Word里的文本包含有很多格式,比如字体、字号、粗体/斜体、颜色等等。一个Run对象是具有相同格式的文本,当发生变化的时候就需要一个新的Run对象,这也就是上图中1个Paragraph对象有4个Run对象的原因。
      理解以上知识后,我们再来了解读与写吧。
      2. 读取Word文档
      我们本地创建一个案例文档,用于演示读取Word,案例文档内容如下:


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


    1. <font size="3"> import docx

    2.   # 读取Word文档

    3.   doc = docx.Document(r'案例.docx')</font>
    复制代码





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


    1. <font size="3">import docx

    2.   def getText(fileName):

    3.   doc = docx.Document(fileName)

    4.   TextList = for paragraph in doc.paragraphs:

    5.   TextList.append(paragraph.text)return '\n'.join(TextList)</font>
    复制代码


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


    1. <font size="3">fileName = r'案例.docx'

    2.   print(getText(fileName))</font>
    复制代码


    1. <font size="3"> 标题1

    2.   这是一个段落,有粗体和斜体大家好,我是才哥。标题2</font>
    复制代码


    当然了,这里读取后输出显示的文本不带有格式属性哈。
      3. 写入Word文档
      在写入Word之前,我们先简单了解下Word的一些格式规则。
      毫不夸张的讲,把全局样式玩的明白的人蛮少的。这方面主要是正文样式与标题样式,如果玩得明白的话,其实设置好了之后几乎不需要再进行啥调整,全局格式都能自动设置与更新。就我所见的大多数朋友的文档,这方面基本达不到。(感觉会被爆锤~~)






    比如,我们可以设置正文样式为 微软雅黑字体,字号12,缩进,间距等等;设置标题样式为 微软雅黑字体,字号14,删除段落后间距等等。
      在我们Python处理Word的时候,段落样式可以应用于 Paragraph对象,字符样式可以应用于Run对象,链接的样式可以应用于这两种对象。可以将Paragraph和Run对象的style属性设置为一个字符串,从而设置样式。这个字符串应该是一种样式的名称。如果style被设置为None,就没有样式与Paragraph或Run对象关联。
      当然,这里我们不展开介绍,就简单介绍Run对象上的字符属性。关于更多的介绍,我们放在第三期的详解Python写Word里。
      对于Run对象的字符text属性,都有3个状态:True(启用)、False(禁用)和None(默认)。
      我们演示一下:





    以上就是对段落的一些简单介绍及演示,接下来,我们来看看怎么创建并写入Word。
      要创建自己的.docx文件,就调用docx.Document,返回一个新的、空白的Word Document对象 。Document对象的add_paragraph方法将一段新文本添加到文档中,并返回添加的 Paragraph 对象的引用。在添加完文本之后,向 Document 对象的save方法传入一个文件名字符串,将 Document 对象保存到文件。



    1. <font size="3">import docx

    2.   doc = docx.Documentdoc.add_paragraph('这是一个段落')

    3.   doc.save('写入word.docx')</font>
    复制代码





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


    1. <font size="3">import docx

    2.   doc = docx.Documentp1 = doc.add_paragraph('这是一个段落')

    3.   p1.add_run('加粗的一句话').bold = True

    4.   doc.add_paragraph('这是第二个段落')

    5.   doc.save('多段落.docx')</font>
    复制代码



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


    1. <font size="3">import docx

    2.   doc = docx.Documentdoc.add_heading('标题',0)

    3.   doc.add_heading('标题1',1)

    4.   doc.add_heading('标题2',2)

    5.   doc.add_heading('标题3',3)

    6.   doc.add_heading('标题4',4)

    7.   doc.save('标题.docx')</font>
    复制代码





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



    1. <font size="3">import docx

    2.   doc = docx.Documentp1 = doc.add_paragraph('这是一个段落')

    3.   p1.add_run('加粗的一句话').bold = True

    4.   # 换行

    5.   doc.paragraphs[0].runs[0].add_break

    6.   doc.save('换行.docx')</font>
    复制代码





    有人会说,一般word里还有图片嘛,当然咱们也能搞定添加图片。
      有一个 add_picture方法,可以在段落末尾添加图像 。



    1. <font size="3"> import docx

    2.   doc = docx.Documentdoc.add_paragraph('这是一个段落,后面带图片')

    3.   doc.add_picture('图片.png',

    4.   width=docx.shared.Inches(3),

    5.   height=docx.shared.Cm(4))

    6.   doc.add_paragraph('这是第二个段落')

    7.   doc.save('图片.docx')</font>
    复制代码



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


    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-5-11 19:03 , Processed in 0.063376 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表