python docx如何阅读文本以及内联图像?

时间:2016-03-26 03:47:29

标签: python python-docx

我有一个简单的docx文件like this(只需在文本中插入内联png文件):enter image description here

我试过了:

>>> x=docx.Document('12.docx')
>>> for p in x.paragraphs:
    print(p.text)


headend
>>> list(x.inline_shapes)
[]

我解压12.docx个文件,发现word/media/image1.png是该位置。那么有没有办法获得如下输出:

>>> for p in x.paragraphs:
    print(p.text_with_image_info)


head<word/media/image1.png>end

1 个答案:

答案 0 :(得分:2)

您应该能够获得这样的内联形状列表:

>>> [s for s in x.inline_shapes]
[<InlineShape object at 0x...>]

如果没有显示,那么您可能需要检查XML以找出它在XPath位置'//w:p/w:r/w:drawing/wp:inline'找不到任何内容的原因。如果您在那里看到一个空列表,这可能会产生一个有趣的发现。

关于按文档顺序获取图像文本的问题,您需要转到lxml图层。

您可以使用w:p获取段落lxml元素Paragraph._element。从那里,您可以使用.xml属性检查XML:

>>> p = paragraph._p
>>> p.xml
'<w:p> etc ...'

您需要遍历w:p元素的子元素,我希望您能够找到主要的w:r(运行)元素。如果我没有弄错的话,文字会保留在w:t个元素的下方,而w:drawing元素是w:t的同伴。

您可以使用正确的子元素构建像InlineShape这样的python-docx对象,以便在找到正确的位后访问更方便的API。

如果您正在使用lxml级别的电话,那么它可以做一些工作但是可行。