1. 简介:
要获取word文档中的图片文件。思路就是先解压,再查找。python中,下面两个库都可以实现这个功能:
(1)zip库
(2)docx库
zip库:
上一篇博文已经提过,word本质上也是一个压缩文件,word文档中的img文件可以在解压后的文件中找到。所以,可以使用unzip进行解压,再查找img的方式来找到img文件。这种方式,请移步至:
Python3-word文档操作(七):提取word文档中的图片方式一-利用word文档的压缩文件属性
本篇中,主要介绍docx库来实现word文档中的图片的获取。
2.使用docx库获取word中的图片:
核心思路:
1)使用docx库来实现;
2)创建一个doc,获取doc.part._rels属性,这是一个目录,根据这个属性,再一步一步找图片文件。
代码如下:
# -*- coding: utf-8 -*-
import os
import sys
import re
import time
import docx
from docx.shared import RGBColor
from docx.shared import Pt
#抓取word文件中的图片
def fetch_image(doc_path, desc_path):
doc = docx.Document(doc_path)
dict_rel = doc.part._rels #rels其实是个目录
for rel in dict_rel:
rel = dict_rel[rel]
print("rel",rel.target_ref)
if "image" in rel.target_ref:
# create_dir(desc_path)
img_name = re.findall("/(.*)", rel.target_ref)[0] #windos:/
print("img_name",img_name)
word_name = os.path.splitext(doc_path)[0]
print("word_name",word_name)
if os.sep in word_name:
new_name = word_name.split('\\')[-1]
else:
new_name = word_name.split('/')[-1]
img_name = f'{new_name}_{img_name}'
with open(f'{desc_path}/{img_name}', "wb") as f:
f.write(rel.target_part.blob)
def get_image():
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(doc_name,desc_path)
#创建目录
def create_dir(desc_path):
if not os.path.exists(desc_path):
os.makedirs(desc_path)
if __name__ == '__main__':
#create_doc()
#fetch_doc()
#update_doc()
#create_doc_table()
#fetch_doc_table()
#modify_doc_table()
get_image()
运行结果:
可以看出,我们成功的获取到了这个img文件。
说明:
1)get_image:设置要处理的word文件;调用fetch_image函数;
2)fetch_image:核心函数,用于获取word文件中的图片;
3)获取word文档的实例,再遍历 doc.part._rels。
doc = docx.Document(doc_path)
dict_rel = doc.part._rels #rels其实是个目录4)如果找到img文件,就创建,即写数据到文件中:
f.write(rel.target_part.blob)