使用Python从DOCX Word文档中提取表格

5

我正在尝试提取DOCX Word文档中表格的内容,但是我对xml/xpath不熟悉。

from docx import *
document = opendocx('someFile.docx')
tableList = document.xpath('/w:tbl')

这会触发“XPathEvalError:未定义的命名空间前缀”错误。我相信这只是在开发脚本时可以预期的第一个错误。不幸的是,我找不到有关python-docx的教程。

您能否提供一个表格提取的示例?


你从哪里获取到docx文件的?能提供一个URL吗? - Alexis Métaireau
你应该寻找一份Python XML教程。根据来源,opendocx函数返回一个XML文档。Python-docx库中的其余函数都是围绕lxml Python库的包装器,网址为http://lxml.de/,至少在我看来是这样的。 - Spencer Rathbun
@Spencer Rathbun:以下代码没有引发错误,但奇怪的是它返回了[] tableList = document.xpath('//tbl') print tableList 这是我不理解的DOCX特性吗? - mgierdal
@mgierdal 看起来结果正确。它在xml树中搜索tbl,但找不到它。因此,您的结果集为空。我建议使用print document打印出整个xml文件,看看是否有您期望的标签。如果有,那么您的函数调用可能有问题。查找lxml库中xpath函数的文档,看看您是否有格式错误的命令。 - Spencer Rathbun
@mgierdal 看起来在命名空间方面有一些特殊的细节。请在链接页面中向下查看,了解如何传递命名空间字典,并告诉我是否有所帮助。 - Spencer Rathbun
显示剩余3条评论
3个回答

2
经过一番讨论,我们发现需要为此使用命名空间才能使其正常工作。Xpath 方法是适当的解决方案,只需首先传入文档命名空间即可。 lxml xpath 方法提供了命名空间相关的详细信息。在链接中向下查看有关传递 namespace 字典和其他细节的内容。
如上面 mgierdal 在评论中所解释的:

tblList = document.xpath('//w:tbl', namespaces=document.nsmap) 的效果非常好。因此,我理解 w: 是必须扩展为完整命名空间名称的简写形式,并且该字典由 document.nsmap 提供。


1

首先按照 @abdulsaboor 的建议安装 python-docx

pip install python-docx

然后这段代码应该做什么:

from docx import Document


document = Document('myfile.docx')

for table in document.tables:
    print()
    for row in table.rows:
        for cell in row.cells:
            print(cell.text, end=' ')

0
你可以使用python-docx从docx中提取表格。请查看以下代码:
from docx import Document()
document = Document(file_path)

tables = document.tables

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接