Python3-word文档操作(八):提取word文档中的图片方式一-利用docx库

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)


  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liranke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值