如何迭代python docx文档中的所有内容?

如何迭代python docx文档中的所有内容?,python,python-docx,Python,Python Docx,我正在使用pythondocx将一个单词docx转换为一个定制的HTML等价物。我需要转换的文档中有图像和表,但我无法确定如何在给定的运行中访问图像和表。以下是我的想法 for para in doc.paragraphs: for run in para.runs: # How to tell if this run has images or tables? …但是我在运行中没有看到任何关于InlineShape或表的信息。我必须直接回到XML,还是有更好、更干净的

我正在使用
pythondocx
将一个单词docx转换为一个定制的HTML等价物。我需要转换的文档中有图像和表,但我无法确定如何在给定的运行中访问图像和表。以下是我的想法

for para in doc.paragraphs:
    for run in para.runs:
        # How to tell if this run has images or tables?
…但是我在
运行
中没有看到任何关于
InlineShape
的信息。我必须直接回到XML,还是有更好、更干净的方法来迭代文档中的所有内容


谢谢

假设
doc
属于
Document
类型,那么您要做的是有3个单独的迭代:

  • 一个用于段落,正如您在代码中所做的那样
  • 通过
    doc.tables
  • 一个用于形状,通过
    doc.inline\u形状
代码不起作用的原因是段落没有对文档中的表和/或形状的引用,因为这些表和/或形状存储在
文档
对象中


以下是有关更多信息的文档:

对于您尝试执行的操作,实际上有两个问题需要解决。第一个是按文档顺序迭代文档中的所有块级元素。第二种方法是按照每个块元素中的内联元素出现的顺序对它们进行迭代

PythonDocx还不具备直接执行此操作所需的功能。但是,对于第一个问题,这里有一些可能适用于您的示例代码:

据我所知,没有确切的对应项可以处理内联项,但我希望您可以在段落.runs中走得更远。所有内联内容都将在一个段落内。如果你在这方面做得很好,只是对获取图片或其他东西挂断了电话,那么你可以进入lxml级别,对一些XML进行解码,以获得所需的内容。如果您已经取得了长足的进步,并且仍然非常感兴趣,如果您在GitHub问题列表上发布了类似“feature:paragration.iter_inline_items()”的功能请求,我可能会提供一些类似的代码来满足您的需求

这个要求不时出现,所以我们一定会在某个时候添加它


请注意,块级项目(主要是段落和表格)可以递归出现,一般解决方案需要考虑这一点。特别是,段落可以(事实上至少必须)出现在表格单元格中。表格也可以出现在表格单元格中。所以理论上它可以变得很深。递归函数/方法是实现所有这些功能的正确方法。

感谢您的快速响应。我怎么知道它们在原始文档中出现的顺序呢?文档/api中似乎没有关于这一点的任何内容。也许您可以添加一个功能请求。在当前状态下,python docx似乎更适合创建.docx文件,而不是读取它们。您可能需要考虑编写自己的解析器,因为.docx文件本质上是一个XML文件。这里有一些出发点:,谢谢!这给了我一个很好的下一步。我将看看是否可以添加代码来迭代段落中的内联项。不幸的是,问题40中的代码不再适用于commit e784a73中的更改。是否有一些更新的代码?如果你能在这个问题上添加一篇文章,说明你正在尝试的内容和不起作用的内容,我会看看是否能提供帮助。在我看来,这似乎是可行的,只是不是在同一个问题的帖子。谁会猜到呢?我也是!