1 简介:
如何提取出word文件中的图片,并且保存在自己定义的目录下,是本篇需要介绍的内容。
可以利用word文档的压缩属性来实现,这是因为,word文档本质上也是一个压缩文档。我们解压开之后,遍历所有的目录,将图片文件copy出来即可。
2 使用unzip命令来获取图片
使用unzip命令来解压一个zip文件,再找出图片文件。
使用方式:
在命令行:
unzip xxxxx.zip -d res //将zip文件减压到res目录下
例子1: 下图是一个直接用unzip命令实际的例子:
说明:
可见,在解压后的media目录下,可以看到图片文件。使用unzip命令,解压出来的目录中,图片文件的目录位置是在:
zip/word/media/目录下
当然,你可以写一个简单的python执行脚本,将unzip命令进行一个包装,这里从略。
3 利用python提供的zip库来实现图片的获取:
核心原理:
使用zipfile库来实现。
例子2: 利用python提供的zip库来实现图片的获取:
思路:
1)python库zipfile可以用来解压zip文件, .doc本质上也是自拍文件,所以可以被正常解压;
2)解压后的图片文件目录在当下目录的子目录word/media目录下;
3)找到文件后,可以将文件copy到自己指定的目录下。
代码如下:
# -*- coding: utf-8 -*-
import os
import sys
import re
import time
import docx
import shutil
import zipfile
#提取word文件中的图片
def fetch_image_by_unzip(doc_path, desc_path):
tmp_path = f'{os.path.splitext(doc_path)[0]}'
# 拷贝源文件后重命名再解压
splitext = os.path.splitext(doc_path)
zip_path = shutil.copy(doc_path, f'{splitext[0]}_new{splitext[1]}')
with zipfile.ZipFile(zip_path, 'r') as f:
for file in f.namelist():
f.extract(file, tmp_path)
os.remove(zip_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 '没有找到图片'
pictures = os.listdir(pic_path)
if not os.path.exists(desc_path):
os.makedirs(desc_path)
for picture in pictures:
# 根据word的文件名生成图片的名称
word_name = os.path.splitext(doc_path)[0]
if os.sep in word_name:
new_name = word_name.split('\\')[-1]
else:
new_name = word_name.split('/')[-1]
picture_name = f'{new_name}_{picture}'
shutil.copy(os.path.join(pic_path, picture), os.path.join(desc_path, picture_name))
shutil.rmtree(tmp_path)
return (os.path.join(desc_path, pic) for pic in os.listdir(desc_path))
#创建目录
def create_dir(desc_path):
if not os.path.exists(desc_path):
os.makedirs(desc_path)
def get_image_by_unzip():
doc_name = "念奴娇_赤壁怀古.docx"
desc_path = sys.argv[1] #目标文件目录
pwd = os.path.dirname(os.path.abspath(desc_path))
print("[get_image]desc_path",desc_path)
desc_path = os.path.join(pwd, desc_path) #目标路径
fetch_image_by_unzip(doc_name,desc_path)
if __name__ == '__main__':
#create_doc()
#fetch_doc()
#update_doc()
#create_doc_table()
#fetch_doc_table()
#modify_doc_table()
get_image_by_unzip()
说明:
1)fetch_image_by_unzip,核心函数,功能是提取word文件中的图片;
2)zipfile.ZipFile:创建一个zipFile对象;
3)f.extract(file, tmp_path):解压;
4)遍历解压后的文件,找到word/media目录;
pic_path = os.path.join(tmp_path, 'word/media')
5)遍历word/media目录,找出图片文件;
6)将图片文件copy到目标文件夹下:
shutil.copy(os.path.join(pic_path, picture), os.path.join(desc_path, picture_name))
运行结果:
可见,运行完成后,我们已经将图片文件copy到了自定义的zip_img文件夹中。