python - 如何使用 Python 从 doc/docx 文件中提取数据

标签 python ms-word docx doc

我知道那里有类似的问题,但我找不到可以回答我的祈祷的东西。我需要的是一种从 MS-Word 文件访问某些数据并将其保存在 XML 文件中的方法。 阅读python-docx没有帮助,因为它似乎只允许一个人写入 word 文档,而不是阅读。 准确地展示我的任务(或者我选择如何完成我的任务):我想在文档中搜索关键字或短语(文档包含表格)并从关键字/短语所在的表格中提取文本数据成立。 有人有什么想法吗?

最佳答案

docx 是一个包含文档 XML 的 zip 文件。您可以打开 zip、阅读文档并使用 ElementTree 解析数据。

这种技术的优点是您不需要安装任何额外的 python 库

import zipfile
import xml.etree.ElementTree

WORD_NAMESPACE = '{http://schemas.openxmlformats.org/wordprocessingml/2006/main}'
PARA = WORD_NAMESPACE + 'p'
TEXT = WORD_NAMESPACE + 't'
TABLE = WORD_NAMESPACE + 'tbl'
ROW = WORD_NAMESPACE + 'tr'
CELL = WORD_NAMESPACE + 'tc'

with zipfile.ZipFile('<path to docx file>') as docx:
    tree = xml.etree.ElementTree.XML(docx.read('word/document.xml'))

for table in tree.iter(TABLE):
    for row in table.iter(ROW):
        for cell in row.iter(CELL):
            print ''.join(node.text for node in cell.iter(TEXT))

请参阅我对 How to read contents of an Table in MS-Word file Using Python? 的 stackoverflow 回答了解更多详情和引用。

在回答下面的评论时, 图像没有那么清晰,无法提取。我创建了一个空的 docx 并在其中插入了一张图片。然后我打开 docx 文件作为 zip 存档(使用 7zip)并查看 document.xml。所有图像信息都作为属性存储在 XML 中,而不是像文本那样存储在 CDATA 中。因此,您需要找到您感兴趣的标签并提取您要查找的信息。

例如添加到上面的脚本:

IMAGE = '{http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing}' + 'docPr'

for image in tree.iter(IMAGE):
    print image.attrib

输出:

{'id': '1', 'name': 'Picture 1'}

我不是 openxml 格式方面的专家,但我希望这对您有所帮助。

我确实注意到该 zip 文件包含一个名为 media 的目录,其中包含一个名为 image1.jpeg 的文件,该文件包含我的嵌入图像的重命名副本。您可以查看 docx zip 文件以调查可用的内容。

关于python - 如何使用 Python 从 doc/docx 文件中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22756344/

相关文章:

python - 谷歌应用引擎 : how to send html using send_mail

python - 是否有推荐的Python机器学习包?

node.js - 直接下载 OneDrive 文件的链接?

python - 如何使用 python-docx 更改表格内容和样式?

python - 如何获取当前登录 Flask-Login 的用户列表?

python - 更有效地拆分列

VBA - 用户窗体上控制字体的奇怪问题

vba WScript.Shell带参数运行.exe文件

xml - 我们如何将 Microsoft Word DOCX 文件转换为 XSLT 中的 HTML?

java - Apache POI XWPF 添加形状到标题