Python3-word文档操作(七):提取word文档中的图片方式一-利用word文档的压缩文件属性

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文件夹中。 

 


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

liranke

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

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

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

打赏作者

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

抵扣说明:

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

余额充值