You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python 3.X提取docx文档中原有格式的编号列表?

提取DOCX编号列表的可行思路
  • 深挖python-docx的列表处理能力:python-docx并非完全无法提取列表,你可以遍历文档段落,通过paragraph.style判断是否为列表样式(通常样式名以List开头),再用paragraph._p.xpath('.//w:numPr/w:numId')获取numId值,结合document.numbering匹配对应编号规则。就算numId随机变化,也能通过段落的缩进级别(paragraph.paragraph_format.left_indent)判断层级,手动拼接出和原文档一致的列表结构。
  • 用python-docx2txt直接提取可视化编号:这个库能直接提取带原生显示编号的文本(比如"1. xxx"、"1.1 xxx"),之后用正则匹配编号模式(如^\d+\.\s、^\d+\.\d+\s)区分列表项与普通文本,跳过XML层面的numId问题,直接基于可见编号构建结构,比二次解析pandoc结果更简洁。
  • Windows环境下调用Word COM接口:借助win32com.client调用Word自身的解析能力,它能精准识别所有列表结构,不受numId异常影响。示例代码如下:
    import win32com.client as win32
    word = win32.gencache.EnsureDispatch('Word.Application')
    doc = word.Documents.Open("目标文档路径.docx")
    for para in doc.Paragraphs:
        if para.Range.ListFormat.ListType != 0:
            level = para.Range.ListFormat.ListLevelNumber
            number_display = para.Range.ListFormat.ListString
            content = para.Range.Text.strip()
            # 此处可根据level和number_display构建层级列表
    doc.Close()
    word.Quit()
    
  • 优化pandoc转换逻辑:用pandoc -s 源文档.docx -o 输出文件.md将文档转为Markdown,Markdown会保留标准的编号列表结构,之后用Markdown解析库(如markdown-it-py)直接提取列表内容,比转成纯字符串再处理更可靠。

内容的提问来源于stack exchange,提问作者Dion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 10:32:06