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

如何用python-docx筛选docx中Normal样式且字号非11的文本?

问题分析与解决

原代码不正确,核心问题是当文本字号继承自段落样式(未单独设置字号)时,run.font.size会返回None,此时None != Pt(11)的判断结果为True,导致那些继承了Normal样式默认11号字号的文本被错误纳入结果。

正确实现方式

要获取文本的实际字号,需优先使用run自身设置的字号,若没有则取段落样式的字号,再判断是否不等于11磅,同时确保段落样式为Normal:

from docx.api import Document
from docx.shared import Pt

texts = []
document = Document('new.docx')

for p in document.paragraphs:
    # 过滤非Normal开头的段落样式
    if not p.style.name.startswith("Normal"):
        continue
    # 获取段落样式的默认字号(Normal样式默认通常为11pt)
    para_default_size = p.style.font.size if p.style.font.size else Pt(11)
    for run in p.runs:
        # 确定run的实际字号:优先用run自定义的,无自定义则用段落默认
        actual_size = run.font.size if run.font.size is not None else para_default_size
        # 判断实际字号是否不等于11pt
        if actual_size != Pt(11):
            texts.append(run.text)

print(texts)

补充说明

  • 若文档中Normal样式的默认字号不是11pt,可先打印p.style.font.size确认实际值,再调整代码中的默认值。
  • 若只需严格匹配"Normal"样式而非变体(如"Normal Table"),将判断条件改为p.style.name == "Normal"即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 22:42:16