天天看点

利用python批量处理Word文件——正文、标题

前面写了如何处理word中的表格:利用python批量处理Word文件——表格 ,其实我觉得word正文应该很少用到批处理,不过万一有朋友需要呢,我们要处理的文件内容千奇百怪,但我觉得难点其实是如何对我们想处理的内容进行读写,所以这篇博客的主要内容就是word文件的读写。我把word文件中的内容分为三类:一是表格;二是图片;三是其它内容。表格和图片的处理我在另外的博客中有详细说明,这里主要谈谈word正文的读写。

在docx中,Word内容的(除表格、图片)的基本组成是段落,因此word的所有内容都存储在paragraphs中,paragraph有两个属性:一是text,二是style。text存储段落的内容,style判断段落的种类。
1.读取Word内容

1.1读取Word中的表格

利用python-docx批量处理Word文件——表格

1.2读取Word中的图片

利用python-docx批量处理Word文件—图片

1.3读取Word正文
from docx import Document
doc=Document("./a.docx")
for p in doc.paragraphs:
    print(p.text)
           

通过遍历paragraphs就可以获得word中全部内容,有时候我们并不需要读取Word中的所有内容,我们可能只想要某些特殊的内容,比如标题,比如列表,那么docx可否实现呢,答案是肯定的。

1.3.1 读取Word中的标题

  • 一级标题
for p in doc.paragraphs:
    if p.style.name=='Heading 1':
        print(p.text)
           
  • 二级标题
for p in doc.paragraphs:
    if p.style.name=='Heading 2':
        print(p.text)
           
  • 所有标题
import re
for p in doc.paragraphs:
    if re.match("^Heading \d+$",p.style.name):
        print(p.text)
           

1.3.2 读取正文

for p in doc.paragraphs:
    if p.style.name=='Normal':
        print(p.text)
           

1.3.3 其它内容

从前面可以看出,如果知道不同内容的style.name,那么要读这些内容是极其方便的,这些style.name可以通过以下方式得到:

from docx.enum.style import WD_STYLE_TYPE
for i in s:
    if i.type==WD_STYLE_TYPE.PARAGRAPH:
        print(i.name)
           
2.Word写入数据

2.1 标题

写入标题有两种方法

or

2.2 正文

2.3 分页符

2.5 其它

利用add_paragraph可以插入几何所有内容,只指定对应的style即可。

至于写入数据时的格式控制说起来就比较复杂了,我就不详述了,如果大家有需要,可以看下面文档:

  1. 最好的学习文档:官方API
  2. $用python-docx模块读写word文档
  3. 使用Python写入docx文件并控制字体颜色
  4. python docx 中文字体设置

网上资料很多,大家有更多需求就自己去找吧,或着留言。