使用Python提取docx文件文本时遭遇「异常块」问题求助
使用Python提取docx文件文本时遭遇「异常块」问题求助
嘿,Lara!我碰到过不少类似的情况,你说的「奇怪块」大概率是Word文档里的文本框(Text Box)或者表格(Table)——毕竟python-docx默认遍历doc.paragraphs只会抓取正文段落,这些特殊容器里的内容是不会被自动包含进去的。
给你几个针对性的解决方案,你可以挨个试试:
1. 提取文本框内的内容
文本框在docx里属于「嵌入形状」,需要单独遍历提取:
from docx import Document doc = Document('XXXXXXXXXXXXXXXX.docx') # 先提取普通段落文本 for para in doc.paragraphs: if para.text.strip(): # 过滤空段落 print(para.text) # 提取文本框内的文本 for shape in doc.inline_shapes: if shape.has_text_frame: text_frame = shape.text_frame for para in text_frame.paragraphs: if para.text.strip(): print(para.text)
2. 提取表格内的内容
如果那些「块」是表格,就需要遍历表格的单元格来获取内容:
# 接上面的代码,继续提取表格文本 for table in doc.tables: for row in table.rows: for cell in row.cells: for para in cell.paragraphs: if para.text.strip(): print(para.text)
3. 极端情况:用Word原生接口兜底
如果上面的方法都不管用(比如是特殊的富文本控件或OLE对象),可以试试调用Word的原生COM接口提取,不过这个需要Windows环境:
import win32com.client as win32 # 后台启动Word(不显示窗口) word = win32.gencache.EnsureDispatch('Word.Application') word.Visible = False doc = word.Documents.Open(r'XXXXXXXXXXXXXXXX.docx') # 直接获取整个文档的纯文本 full_text = doc.Content.Text print(full_text) # 记得关闭文档和Word进程 doc.Close() word.Quit()
最后给你个小建议:可以先手动打开你的Word文档,右键点击那些「奇怪块」,看看它的属性是文本框、表格还是其他对象,这样能更快定位问题~
备注:内容来源于stack exchange,提问作者Lara Croft




