python读取word文档,遍历每一个段落,查看其中有没有jpeg格式图片,如果有保存到硬盘,请给出代码
时间: 2024-05-14 14:19:40 浏览: 103
python读取word文档的方法
好的,以下是Python读取Word文档,遍历每一个段落,查看其中是否有JPEG格式图片并保存到硬盘的示例代码:
```python
import os
import docx
import hashlib
def save_jpeg_from_docx(docx_file_path, save_dir_path):
# 创建一个md5对象,用于为每个JPEG文件生成唯一的文件名
md5_obj = hashlib.md5()
# 打开Word文档
doc = docx.Document(docx_file_path)
# 遍历Word文档中的每一个段落
for i in range(len(doc.paragraphs)):
p = doc.paragraphs[i]
# 遍历段落中的每一个inline对象
for r in p.runs:
for pic in r.element.xpath('.//pic:pic/pic:blipFill/a:blip', namespaces=docx.image.image._nsmap):
# 为了确保这个图片是JPEG格式的,需要检查图片的嵌入类型是否为JPEG
image_type = pic.attrib.get('{http://schemas.openxmlformats.org/officeDocument/2006/relationships}embed')
if image_type and 'image/jpeg' in image_type:
# 得到图片在Word文档中的唯一标识(rId)
r_id = os.path.basename(pic.attrib['{%s}embed' % docx.image.image._nsmap['r']])
# 得到嵌入在Word文档中的JPEG图片的二进制数据
image_data = None
for part in doc.part.related_parts:
if part.partname.endswith('/media/' + r_id) or part.partname.endswith('/media/' + r_id + '.jpeg'):
image_data = part.blob
break
if image_data:
# 计算JPEG图片的MD5值,用于生成唯一的文件名
md5_obj.update(image_data)
jpeg_file_name = md5_obj.hexdigest() + '.jpeg'
jpeg_file_path = os.path.join(save_dir_path, jpeg_file_name)
# 将JPEG图片数据保存到硬盘
with open(jpeg_file_path, 'wb') as f:
f.write(image_data)
```
说明:
- `docx_file_path`是Word文档的路径。
- `save_dir_path`是保存JPEG图片的目录路径。
- 使用Python的`docx`模块读取Word文档。
- `xpath`方法用来查找Word文档中的图片,并得到图片的嵌入类型和唯一标识。
- 检查嵌入类型是否为JPEG,如果不是,则忽略这个图片。
- 如果是JPEG格式,则遍历Word文档的所有部件(即`.docx`文件中的所有子文件),找到对应的JPEG图片数据,然后计算图片的MD5值生成唯一的文件名,并将图片数据保存到硬盘。
阅读全文