使用Python的docx库获取Word文档标题、大纲和编号级别

标题等级、大纲等级、编号等级的区别

在Microsoft Word中:

  • 【标题X】是一个样式,一般来说,【标题1】样式的大纲级别是1级。
  • 大纲级别一般用于页面导航和生成目录。可以右键文字->段落里查看/设置大纲的级别。设置成【x级】后左侧导航栏就会显示。
  • 编号等级就是大家熟知的项目编号,常用于正文。

  • 1、使用docx读取word文档

    from docx import Document
    
    source_path = "./test.docx"
    docs = docx_Document(source_path)
    

    基本没有一个python库能直接读取doc文档的,所以需要先把doc转化为docx文件,参考:【python】linux系统下doc转docx文件

    2、使用docx获取word文档的标题 等级 样式

    import re
    
    for paragraph in docs.paragraphs:
        if paragraph and paragraph.text:
            # 获取xml源码
            xml = paragraph._p.xml
            # 进行xml源码字符匹配
            if xml.find('<w:outlineLvl') >= 0:
                start_index = xml.find('<w:outlineLvl')
                end_index = xml.find('>', start_index)
                outlineLvl_value = xml[start_index:end_index+1]
                outlineLvl_value = re.search("\d+", outlineLvl_value).group()
                print(f"文本:{paragraph.text}-->大纲等级:{outlineLvl_value}")
    

    原理:
    1、docx.Document()读取文档后会按照文章段落划分成一段一段的。
    2、然后我们再获取每个段落的xml源码,即:xml = paragraph._p.xml。
    3、源码中的<w:outlineLvl w:val=“2”/>就表示这是个3级大纲(因为是从0开始)。
    4、接下来就好办了,就用字符串匹配把这个值提取出来就行了。

    3、使用docx获取word文档的编号等级

    原理和代码同上,只需要把outlineLvl改成ilvl即可。

    物联沃分享整理
    物联沃-IOTWORD物联网 » 使用Python的docx库获取Word文档标题、大纲和编号级别

    发表评论