如何用Python docx库提取Word中样式为No Spacing的项目符号文本?
用Python-docx提取Word自定义项目符号文本的解决办法
问题根源
你遇到的情况是因为讲义里的彩色项目符号段落没用到Word内置的List Bullet样式,而是在No Spacing基础样式上手动加了项目符号格式——这种操作在Word里很常见,手动改格式而非应用列表样式,会导致样式名称不变,但段落有列表的视觉效果,所以靠样式名称判断完全无效。
代码解决方案
靠谱的判断方式:检查段落的列表属性
python-docx里,带项目符号/编号的段落会有numPr这个内部属性,直接判断这个属性是否存在就能精准识别:
from docx import Document doc = Document("你的讲义文件路径.docx") bullet_texts = [] for para in doc.paragraphs: # 检查段落是否属于列表项 if para._element.pPr and para._element.pPr.numPr: bullet_texts.append(para.text) # 输出提取结果 for text in bullet_texts: print(text)
备选方案:结合缩进+符号匹配(兼容性稍差)
如果上面的方法没生效,可以试试通过段落首缩进和开头符号来筛选,注意要替换成你文件里的实际符号:
from docx import Document from docx.shared import Pt doc = Document("你的讲义文件路径.docx") bullet_texts = [] for para in doc.paragraphs: # 先看首缩进是否符合项目符号段落特征 if para.paragraph_format.first_line_indent and para.paragraph_format.first_line_indent > Pt(0): # 再匹配开头的项目符号字符(换成你文件里的彩色圆圈) if para.text.startswith(("●", "○")): # 去掉开头的符号和空格,提取纯文本 bullet_texts.append(para.text.lstrip("●○ ").strip()) for text in bullet_texts: print(text)
手动修改文件格式的办法
如果想让原有的样式判断代码生效,可以手动把讲义里的项目符号段落改成用List Bullet样式:
- 选中所有带项目符号的段落
- 在Word的「样式」面板里找到并应用「List Bullet」(找不到就点样式面板右下角的展开按钮)
- 保存后,用
if para.style.name == 'List Bullet':就能正常识别了
内容的提问来源于stack exchange,提问作者Timon
相关产品推荐
相关产品推荐

