You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用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

火山引擎 最新活动