python word保存图_python实现word内图片的提取

前言

.docx文件其实也就是一个压缩文件,当我们将一个docx文件扩展该为zip后可以看到如下目录

其中我们要找的图片就在word/media目录内,如图

所以,要提取word内的图片就需要将docx弄成zip文件,然后解压,在从media文件内取得图片,然后再将zip文件弄成docx文件(或者可以直接拷贝一份源文件,将扩展改为zip文件,用完后直接将zip文件删除)

代码实现

注:以下代码只适用于docx文件,如果你的文件是doc文件,请将它转为docx文件。参考随笔

import os

import shutil

import zipfile

def get_picture(word_path, result_path):

"""

获取word内的所有图片

:param word_path: word文件

:param result_path: 结果目录,无需手动创建

:return: None or generator,None:word内没有图片,generator:每个图片的路径

"""

zip_path = f'{os.path.splitext(word_path)[0]}.zip'

tmp_path = f'{os.path.splitext(word_path)[0]}'

os.rename(word_path, zip_path)

# 解压zip文件

with zipfile.ZipFile(zip_path, 'r') as f:

for file in f.namelist():

f.extract(file, tmp_path)

os.rename(zip_path, word_path)

# 注:word图片在zip文件内的word/media目录下

pic_path = os.path.join(tmp_path, 'word/media')

if not os.path.exists(pic_path):

shutil.rmtree(tmp_path)

return 'no pictures found'

pictures = os.listdir(pic_path)

if not os.path.exists(result_path):

os.makedirs(result_path)

for picture in pictures:

# 根据word的文件名生成图片的名称

word_name = os.path.splitext(word_path)[0]

if os.sep in word_name:

mid = word_name.replace('/', '\\')

new_name = mid.split('\\')[-1]

else:

mid = word_name.replace('\\', '/')

new_name = mid.split('/')[-1]

picture_name = f'{new_name}_{picture}'

shutil.copy(os.path.join(pic_path, picture), os.path.join(result_path, picture_name))

shutil.rmtree(tmp_path)

return (os.path.join(result_path, pic) for pic in os.listdir(result_path))

word_path可以支持所有类型路径,如

p = r"C:\Users\Desktop\test\小说.docx"

p1 = "C:/Users/Desktop/test/小说.docx"

p2 = "C:\\Users\\Desktop\\test\\小说.docx"

Python中,要提取Word文档中的图片保存,可以使用`python-docx`这个库。`python-docx`是一个用于处理Word文档(.docx)的Python库,它可以帮助你读取和写入文档,包括提取文档中的图片。不过需要注意的是,从Word文档中提取图片并不是一个特别直接的过程,因为`.docx`格式是一个压缩包格式,图片以二进制的形式存储在其中。 下面是一个简单的步骤说明,展示如何使用`python-docx`提取Word文档中的图片: 1. 安装`python-docx`库(如果尚未安装): ``` pip install python-docx ``` 2. 使用`python-docx`打开Word文档,遍历文档中的表格。 3. 对于表格中的每个单元格,检查是否有嵌入的图片。 4. 如果找到图片,将其提取出来并保存到磁盘上。 这里是一个简单的代码示例: ```python from docx import Document import os # 加载Word文档 doc = Document('example.docx') # 确保有一个用于存放图片的目录 if not os.path.exists('extracted_images'): os.makedirs('extracted_images') # 遍历文档中的所有表格 for table in doc.tables: for row in table.rows: for cell in row.cells: # 检查单元格中是否有图片 if cell._element.xpath('.//a:blip'): # 获取图片的二进制数据 image = cell._element.xpath('.//a:blip')[0] rId = image.attrib['{http://schemas.openxmlformats.org/officeDocument/2006/relationships}embed'] image_part = doc.part.related_parts[rId] image_bytes = image_part.blob # 从文件名中获取图片的扩展名 filename = image_part.content_type.split('/')[1] # 创建文件路径 file_path = os.path.join('extracted_images', f'image_{count}.{filename}') count += 1 # 保存图片到磁盘 with open(file_path, 'wb') as img_file: img_file.write(image_bytes) ``` 在运行上述代码之前,请确保你有一个名为`example.docx`的Word文档,其中包含你想提取图片
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值