首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Python从doc/docx文件中提取数据

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

Stack Overflow用户
提问于 2014-03-31 07:57:41
回答 4查看 40.2K关注 0票数 10

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-04-08 06:54:21

看来pywin32做了这方面的工作。您可以遍历文档中的所有表和表中的所有单元格。获取数据有点棘手(必须省略每个条目中的最后2个字符),但否则,这是一个10分钟的代码。如果有人需要更多的细节,请在评论中这样说。

票数 0
EN

Stack Overflow用户

发布于 2016-05-09 01:42:37

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

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

代码语言:javascript
运行
复制
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))

有关更多细节和参考,请参阅我对如何使用Python读取MS-Word文件中表的内容?的堆栈溢出回答。

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

例如,添加到上面的脚本:

代码语言:javascript
运行
复制
IMAGE = '{http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing}' + 'docPr'

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

产出:

代码语言:javascript
运行
复制
{'id': '1', 'name': 'Picture 1'}

我不是openxml格式的专家,但我希望这会有所帮助。

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

票数 16
EN

Stack Overflow用户

发布于 2014-03-31 08:36:07

使用python-docx在文档中搜索

代码语言:javascript
运行
复制
# 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

代码语言:javascript
运行
复制
# 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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22756344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档