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

如何用python-docx获取docx文档的ListNumber及段落样式

获取Word段落的列表编号及更多样式信息

我之前也碰到过这个问题!用paragraph.style.name确实拿不到列表相关的“List 1”“List 2”标识,因为Word里的列表段落很多时候是基于Normal样式,只是额外应用了列表格式,而不是直接用名为“List 1”的段落样式。下面分两部分给你解决思路:

一、如何获取列表段落的编号/级别信息

1. 判断段落是否为列表项

首先可以用paragraph.is_list_item来快速判断当前段落是不是列表的一部分:

from docx import Document

doc = Document("your_file.docx")
for para in doc.paragraphs:
    if para.is_list_item:
        # 处理列表段落
        pass

2. 获取列表级别(对应List 1/List 2)

如果是列表项,可以通过list_item.level拿到其级别(从0开始计数,0对应List 1,1对应List 2,以此类推):

if para.is_list_item:
    list_level = para.list_item.level
    print(f"该段落属于 List {list_level + 1}")

3. 获取实际显示的编号值(比如1、1.1)

Python-docx没有直接提供获取动态生成的编号文本的方法,但可以通过一些方式计算:

  • 对于连续的同级别列表,你可以统计同级别段落的索引+1作为编号:
if para.is_list_item:
    level = para.list_item.level
    # 筛选所有同级别列表段落
    same_level_paras = [p for p in doc.paragraphs if p.is_list_item and p.list_item.level == level]
    # 当前段落的编号就是索引+1
    current_number = same_level_paras.index(para) + 1
    print(f"当前编号:{current_number}")
  • 如果是多级编号(比如1.1、1.2),需要递归计算父级编号,或者解析段落的底层XML元素(<w:numPr>节点)来获取更准确的编号规则。

二、除了Normal外,还能获取哪些样式信息

paragraph.style.name能拿到所有应用在段落上的内置样式和自定义样式,常见的内置样式包括:

  • 标题类:Heading 1到Heading 9、Title、Subtitle
  • 引用类:Quote、Intense Quote
  • 辅助文本类:Caption、Footer、Header、Footnote Text、Endnote Text
  • 格式类:Strong(加粗样式)、Emphasis(斜体样式)、Hyperlink

另外,除了样式名称,你还能获取样式的具体属性:

  • 字体信息:paragraph.style.font.name(字体名)、paragraph.style.font.size(字号)
  • 段落格式:paragraph.style.paragraph_format.alignment(对齐方式)、paragraph.style.paragraph_format.line_spacing(行间距)、paragraph.style.paragraph_format.left_indent(左缩进)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:54:02