栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

如何提取出word文件中的图片,并且保存在自己定义的目录下。可以利用word文档的压缩属性来实现。word文档本质上也是一个压缩文档。我们解压开之后,遍历所有的目录,将图片文件copy出来即可。

实现1: 直接用unzip命令。

 可见,在解压后的media目录下,可以看到图片文件。当然,你可以写一个简单的python执行脚本,这里从略。主要介绍实现2这个方式。

实现2: 利用python提供的zip库来实现。
# -*- 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)python库zipfile可以用来解压zip文件, .doc本质上也是自拍文件,所以可以被正常解压;

2)解压后的图片文件目录在当下目录的子目录word/media目录下;

3)找到文件后,可以将文件copy到自己指定的目录下。

运行结果:

可见,运行完成后,我们已经将图片文件copy到了自定义的zip_img文件夹中。 


 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/994549.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号