我知道有类似的问题,但我找不到什么东西可以回应我的祈祷。我需要的是一种从MS-Word文件中访问某些数据并将其保存在XML文件中的方法。在python-docx上阅读是没有帮助的,因为它似乎只允许一个人写入word文档,而不是阅读。要准确地呈现我的任务(或者我选择如何处理我的任务):我想搜索文档中的关键字或短语(文档包含表),并从找到关键字/短语的表中提取文本数据。有人有什么想法吗?
发布于 2016-05-09 01:42:37
docx是一个zip文件,包含文档的XML。您可以使用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))
有关更多细节和参考,请参阅我对如何使用Python读取MS-Word文件中表的内容?的堆栈溢出回答。
在回答下面的评论时,图片没有那么清晰地被提取出来。我创建了一个空的docx,并将一个图像插入其中。然后,我将docx文件作为压缩存档(使用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中查看以了解可用的内容。
https://stackoverflow.com/questions/22756344
复制相似问题