一、示例代码
for p in document.paragraphs:
for image in p._element.xpath('.//pic:pic'):
for img_id in image.xpath('//a:blip/@r:embed'):
part=document.part.related_parts[img_id]
if not isinstance(part,ImagePart):
continue
save_dir=dirname(__file__)
save_path=join(save_dir,basename(part.partname))
with open(save_path,"wb")as f:
f.write(part.blob)
二、代码逐行解释
1. `for p in document.paragraphs:`
- 这行代码遍历文档中的所有段落。
2. `for image in p._element.xpath('.//pic:pic'):`
- 在每个段落中,使用 XPath 表达式查找所有 `<pic:pic>` 元素。这些元素代表段落中的图片。
3. `for img_id in image.xpath('//a:blip/@r:embed'):`
- 对于每个图片元素,进一步查找 `<a:blip>` 元素的 `r:embed` 属性。`r:embed` 属性通常包含一个 ID,该 ID 用于引用文档中的实际图片数据。
4. `part=document.part.related_parts[img_id]`
- 使用从 `r:embed` 属性中获取的 ID(`img_id`),从文档的 `related_parts` 中获取对应的图片部分(`ImagePart`)。
5. `if not isinstance(part, ImagePart):`
- 检查获取的部分是否是 `ImagePart` 类型。如果不是,跳过当前循环。
6. `continue`
- 如果 `part` 不是 `ImagePart` 类型,则跳过当前图片,继续处理下一个图片。
7. `save_dir=dirname(__file__)`
- 获取当前脚本文件所在的目录路径,并将其存储在 `save_dir` 变量中。
8. `save_path=join(save_dir,basename(part.partname))`
- 将图片的文件名(从 `part.partname` 获取)与保存目录路径连接,生成完整的保存路径。
9. `with open(save_path,"wb")as f:`
- 使用 `with` 语句打开文件,以二进制写入模式(`"wb"`)。这允许你将图片的二进制数据写入文件。
10. `f.write(part.blob)`
- 将图片的二进制数据(`part.blob`)写入文件。
三、代码总结
- 遍历文档中的每个段落。
- 在每个段落中查找图片元素。
- 获取每个图片的引用 ID。
- 从文档的 `related_parts` 中获取图片数据。
- 检查是否是有效的图片数据。
- 将图片数据保存到文件系统中。
895

被折叠的 条评论
为什么被折叠?



