python读取word文档,遍历每一个段落,用docx中tag.endswith('}drawing')方法查看其中有没有图片,有则保存该图片,请给出代码
时间: 2024-05-02 22:23:52 浏览: 90
好的,请参考以下代码:
```python
import docx
def save_images(doc):
for p in doc.paragraphs:
for r in p._element.r_lst:
for elem in r.iter():
if elem.tag.endswith('}drawing'):
for key in elem.attrib.keys():
if key.endswith('}embed'):
img_part = doc.part.related_parts[elem.attrib[key]]
img_filename = 'images/' + img_part.partname.split('/')[-1]
with open(img_filename, 'wb') as f:
f.write(img_part._blob)
# 测试代码
if __name__ == '__main__':
doc = docx.Document('test.docx')
save_images(doc)
```
说明:
1. 先用 `docx` 库的 `Document` 函数读取 Word 文档。
2. 遍历每一个段落, `_element` 属性是这个段落的 xml 元素,其中包含了这个段落的所有 run(也就是文字或图片等元素), `_element.r_lst` 列表里存储了每个 run 的 xml 元素。
3. 遍历每个 run 的 xml 元素,如果该元素的 tag 以 `}drawing` 结尾(这是 Word 中图片的标记方法),则继续查找该元素的属性中有没有以 `}embed` 结尾的 key,如果有,则说明该元素是一个图片,并且其在 Word 文档中存在一个对应的图片部件。利用 `doc.part.related_parts` 字典即可找到该图片部件,然后利用 `_blob` 属性读取该图片数据,并保存到本地。
阅读全文