python docx 如何将文本与内联图像一起阅读?
python docx how to read text along with inline images?
我有一个简单的 docx 文件 like this(just insert a inline png file to text):
我试过:
>>> 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
您应该能够像这样获得内联形状列表:
>>> [s for s in x.inline_shapes]
[<InlineShape object at 0x...>]
如果 none 出现,那么您可能需要检查 XML 以找出它在 XPath 位置 '//w:p/w:r/w:drawing/wp:inline'
中找不到任何内容的原因。如果您在那里看到一个空列表,那可能会产生一个有趣的发现。
关于按文档顺序获取带有图像的文本,您需要下到 lxml 层。
您可以使用 Paragraph._element
获取段落 lxml 元素 w:p
。从那里你可以检查 XML 与 .xml 属性:
>>> p = paragraph._p
>>> p.xml
'<w:p> etc ...'
您需要遍历 w:p
元素的子元素,我希望您会发现主要是 w:r
(运行) 元素。文本位于 w:t
元素的下方,如果我没记错的话,w:drawing
元素是 w:t
的对等元素。
您可以使用正确的子元素构造 python-docx 对象,如 InlineShape,以便在找到正确的位后访问更方便的 API。
所以这是一项工作,但如果您准备好使用 lxml 级调用,这是可行的。
我有一个简单的 docx 文件 like this(just insert a inline png file to text):
我试过:
>>> 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
您应该能够像这样获得内联形状列表:
>>> [s for s in x.inline_shapes]
[<InlineShape object at 0x...>]
如果 none 出现,那么您可能需要检查 XML 以找出它在 XPath 位置 '//w:p/w:r/w:drawing/wp:inline'
中找不到任何内容的原因。如果您在那里看到一个空列表,那可能会产生一个有趣的发现。
关于按文档顺序获取带有图像的文本,您需要下到 lxml 层。
您可以使用 Paragraph._element
获取段落 lxml 元素 w:p
。从那里你可以检查 XML 与 .xml 属性:
>>> p = paragraph._p
>>> p.xml
'<w:p> etc ...'
您需要遍历 w:p
元素的子元素,我希望您会发现主要是 w:r
(运行) 元素。文本位于 w:t
元素的下方,如果我没记错的话,w:drawing
元素是 w:t
的对等元素。
您可以使用正确的子元素构造 python-docx 对象,如 InlineShape,以便在找到正确的位后访问更方便的 API。
所以这是一项工作,但如果您准备好使用 lxml 级调用,这是可行的。