【问题标题】:How do I extract data from a doc/docx file using Python如何使用 Python 从 doc/docx 文件中提取数据
【发布时间】:2014-03-31 07:57:41
【问题描述】:

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

【问题讨论】:

  • 我不得不对 xls/xlsx 文件做类似的事情,但这很容易,因为有 openpyxl 库,它允许使用 Excel 电子表格做很多事情。但似乎对在 Python 中处理 doc/docx 文件的支持较少。

标签: python ms-word docx doc


【解决方案1】:

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

这种技术的优点是您不需要安装任何额外的 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 zipfile 以了解可用的内容。

【讨论】:

  • 您能指出图像的 NAMESPACE 标签吗?我试过了,但有多种适合,而且碰巧也适合我认为是 ilvl 的列表。
  • 我在上面的答案中添加了一些信息,希望对您有所帮助。
  • 非常感谢,我在研究的同一天晚上得出了同样的结论
【解决方案2】:

使用 python-docx 在文档中搜索

# Import the module
from docx import *

# Open the .docx file
document = opendocx('A document.docx')

# Search returns true if found    
search(document,'your search string')

你还有一个获取文档文本的函数:

https://github.com/mikemaccana/python-docx/blob/master/docx.py#L910

# Import the module
from docx import *

# Open the .docx file
document = opendocx('A document.docx')
fullText=getdocumenttext(document)

使用https://github.com/mikemaccana/python-docx

【讨论】:

【解决方案3】:

似乎 pywin32 可以解决问题。您可以遍历文档中的所有表格以及表格中的所有单元格。获取数据有点棘手(必须省略每个条目的最后 2 个字符),但除此之外,这是一个十分钟的代码。 如果有人需要更多详细信息,请在 cmets 中说明。

【讨论】:

  • 你能发布一个简单的代码示例来做到这一点吗? (例如,选择表格并将内容读取到变量中)谢谢
  • @dasen Here
【解决方案4】:

具有图像提取功能的更简单的库。

pip install docx2txt


然后使用以下代码读取 docx 文件。

import docx2txt
text = docx2txt.process("file.docx")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多