【python】使用docx获取word文档的标题等级、大纲等级和编号等级

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

在Microsoft Word中:

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

1、使用docx读取word文档

python 复制代码
from docx import Document

source_path = "./test.docx"
docs = docx_Document(source_path)

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

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

python 复制代码
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即可。

相关推荐
qq_4523962328 分钟前
【模型手术室】第四篇:全流程实战 —— 使用 LLaMA-Factory 开启你的第一个微调任务
人工智能·python·ai·llama
无心水1 小时前
Java时间处理封神篇:java.time全解析
java·开发语言·python·架构·localdate·java.time·java时间处理
吴秋霖1 小时前
【某音电商】protobuf聊天协议逆向
python·算法·protobuf
深藏功yu名1 小时前
Day24:向量数据库 Chroma_FAISS 入门
数据库·人工智能·python·ai·agent·faiss·chroma
cm6543202 小时前
用Python破解简单的替换密码
jvm·数据库·python
wan9yu2 小时前
为什么你需要给 LLM 的数据"加密"而不是"脱敏"?我写了一个开源工具
python
摇滚侠2 小时前
你是一名 java 程序员,总结定义数组的方式
java·开发语言·python
这个名有人用不3 小时前
解决 uv 虚拟环境使用 pip 命令提示command not found的办法
python·pip·uv·claude code
Oueii3 小时前
掌握Python魔法方法(Magic Methods)
jvm·数据库·python