分享

如何使用Python提取Word文档中的图片?

 知识情报院 2022-02-21

有时候我们会收到一些Word文档,如简历、论文以及其他的Word文档,里面包含了很多图片。如何使用自动化的方式,提取Word里面的图片呢?下面就让我们来一起学习一下

1 安装第三方库 Python-docx

打开cmd命令行(或者powershell)窗口,输入安装第三方库命令

pip install python-docx

等待安装完成

2、导入os、re以及docx库

import docx
import os, re

3、编写图片提取函数

1、读取Word文档,遍历图片

doc = docx.Document(word_path)
        dict_rel = doc.part._rels
        for rel in dict_rel:
            rel = dict_rel[rel]
            if "image" in rel.target_ref:
                if not os.path.exists(result_path):
                    os.makedirs(result_path)
                img_name = re.findall("/(.*)", rel.target_ref)[0]
                word_name = os.path.splitext(word_path)[0]
                if os.sep in word_name:
                    new_name = word_name.split('\\')[-1]
                else:
                    new_name = word_name.split('/')[-1]
                img_name = f'{new_name}-'+'.'+f'{img_name}'

2、依次保存图片

with open(f'{result_path}/{img_name}'"wb"as f:
    f.write(rel.target_part.blob)

3、完整的函数代码

def get_pictures(word_path, result_path):
    """
    图片提取
    :param word_path: word路径
    :return: 
    """

    try:
        doc = docx.Document(word_path)
        dict_rel = doc.part._rels
        for rel in dict_rel:
            rel = dict_rel[rel]
            if "image" in rel.target_ref:
                if not os.path.exists(result_path):
                    os.makedirs(result_path)
                img_name = re.findall("/(.*)", rel.target_ref)[0]
                word_name = os.path.splitext(word_path)[0]
                if os.sep in word_name:
                    new_name = word_name.split('\\')[-1]
                else:
                    new_name = word_name.split('/')[-1]
                img_name = f'{new_name}-'+'.'+f'{img_name}'
                with open(f'{result_path}/{img_name}'"wb"as f:
                    f.write(rel.target_part.blob)
    except:
        pass

4、编写主运行函数

if __name__ == '__main__':

    #获取文件夹下的word文档列表,路径自定义

    os.chdir("D:\Demo")
    spam=os.listdir(os.getcwd())
    for i in spam:
        get_pictures(str(i),os.getcwd())

5、结果展示

完整代码

import docx
import os, re

# 需要安装第三方包
# pip install python-docx
 
def get_pictures(word_path, result_path):
    """
    图片提取
    :param word_path: word路径
    :return: 
    """

    try:
        doc = docx.Document(word_path)
        dict_rel = doc.part._rels
        for rel in dict_rel:
            rel = dict_rel[rel]
            if "image" in rel.target_ref:
                if not os.path.exists(result_path):
                    os.makedirs(result_path)
                img_name = re.findall("/(.*)", rel.target_ref)[0]
                word_name = os.path.splitext(word_path)[0]
                if os.sep in word_name:
                    new_name = word_name.split('\\')[-1]
                else:
                    new_name = word_name.split('/')[-1]
                img_name = f'{new_name}-'+'.'+f'{img_name}'
                with open(f'{result_path}/{img_name}'"wb"as f:
                    f.write(rel.target_part.blob)
    except:
        pass

if __name__ == '__main__':

    #获取文件夹下的word文档列表,路径自定义

    os.chdir("D:\Demo")
    spam=os.listdir(os.getcwd())
    for i in spam:
        get_pictures(str(i),os.getcwd())

今天和大家一起学习了如何从Word文档中批量提取图片,大家都学会了吗?赶快试一试吧!后续,我会和大家一起学习更多的Python编程与Office办公自动化的例子,欢迎大家关注!

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约