python提取word文件中的所有图片

前言

办公中,偶尔会碰到一种情况,需要提取word文档中的图片,决定写这样一款工具自动提取图片。
关于脚本的使用:
情景1:如果你拿到的是一个文件夹,所有的word文件都在这个文件夹的子目录下,深度为1层,你可以直接使用该脚本
情景2:如果你拿到的是一个文件夹,打开之后,里面杂乱无章的充斥着各种文件,你也不确定word文档都在哪,那么你需要使用Everything来手动提取出所有的word文档,虽然我也可以让脚本实现这个功能,但是使用脚本需要考虑到有可能存在同名文件,再处理起来代码量会更大,还是用Everything手动移动文件吧,谁让现在的代码量已经远超我预期了呢?
3:预处理前面的两步之后,就可以直接运行脚本了
4:脚本注释很详细,这里不再赘述
5:目前仅支持docx格式的,主要原因是,如果支持doc的话,需要把doc转为docx,转换略慢,并且,我也用不到。如果你感兴趣的话,我再最下面介绍了互转的方法,你可以把这个函数加进去即可

代码

import zipfile
import os
import shutil
import hashlib
import send2trash

'''
假设所有的word文档存放在某路径中,这个路径中包含各种杂七杂八的玩意
使用Everything,或者"筛选文件.py"把所有的docx文件移动到C:\\Users\\asuka\\Desktop\\123
逐个解压每个docx文档,并提取图片

强烈建议使用Everything用来筛选出所有的word文档,这样假如有两个重名的文档,可以手动处理
如果编写软件来实现的话,会麻烦很多
'''

# 一个用来解压文件的函数
def extract_zip(zip_path):
    os.chdir(os.path.dirname(zip_path))  # 需要进入到这个路径下,这样解压的文件,才在这个路径下
    a = zipfile.ZipFile(zip_path)  # 调用zipfile.ZipFile()函数,创建一个ZipFile对象
    a.extractall()
    a.close()
    os.chdir(path)  # 恢复到之前的路径

# 用来获取所有的图片
'''
测试的时候发现,不同word文件解压之后,里面的图片命名格式一致,
导致不能直接移动图片,否则会造成文件覆盖,这里需要对找到的每一个文件,进行重命名
'''

def get_picture(demo_path):
    count = 1  # 用来个图片进行重命名
    for current_folder, list_folders, files in os.walk(demo_path):
        for f in files:
            if f.endswith('png') or f.endswith('jpg') or f.endswith('jpeg'):  # 设置图片类型是这种
                move_f = current_folder + '\\' + f  # 给出要移动的文件的路径
                new_file_path = path1 + '\\' + str(count) + '.' + f.rpartition('.')[-1]  # 指定新文件的文件路径,文件名数字递增,文件后缀
                shutil.move(move_f, new_file_path)  # 移动文件
                count += 1
    print('[-] 总共获取图片{}张'.format(count - 1))

# 对图片去重
# 计算每个图片的md5值,据此进行去重,去重的文件会被删除到回收站中
def only_one(test_path):
    md5_list = []
    count = 0
    for current_folder, list_folders, files in os.walk(test_path):
        for file in files:
            picture_path = current_folder + '\\' + file  # 获取每个图片的路径
            f = open(picture_path, 'rb')  # 开始计算每个图片的md5值
            md5obj = hashlib.md5()
            md5obj.update(f.read())
            get_hash = md5obj.hexdigest()
            f.close()
            md5_value = str(get_hash).upper()
            # 开始去重
            if md5_value in md5_list:
                send2trash.send2trash(picture_path)  # 如果这个文件的md5值曾经出现过,就删除这张图片
                count += 1
                print('[-] 删除重复图片:' + str(file))
            else:
                md5_list.append(md5_value)  # 如果这个图片的md5值不存在列表中,就添加进列表中
    print('[-] 共删除重复图片:{}张'.format(count))

print('[+] 只有后缀是docx的word文档才可以提取图片!!!')
path = input('[+] 请输入word文档所在文件夹:')  # 获取原始的word文档所在路径
os.chdir(path)

print("[+] 请输入一个路径,用来存放所有的图片")
print("[+] 或者按回车键,我将自动把图片整理之后存放在你的桌面")
path1 = input('')  # path1 用来存放所有的图片文件
if len(path1):
    pass
else:
    desktop_path = os.path.join(os.path.expanduser("~"), 'Desktop')  # 获取桌面路径
    path1 = os.path.join(desktop_path, '所有word文件中的图片')
    os.makedirs(path1)

files = os.listdir(path)  # 获取指定文件夹下的所有文件
for file in files:  # 遍历指定文件夹下的所有文件
    if file.endswith('docx'):  # 加一个判断,这样即使path路径下有别的类型文件也无妨
        filename = file.rpartition('.')[0]  # 获取文件的文件名
        file_path = os.path.join(path, filename)
        os.makedirs(file_path)  # 为获取到的文件名创建一个文件夹
        shutil.move(file, file_path)  # 把word文档移动到同名文件夹中
        word_path = os.path.join(file_path, file)  # 获取此时word文件的文件路径
        extract_zip(word_path)  # 不用改后缀,直接解压docx文件

get_picture(path)
only_one(path1)
print('[-] 现有图片:{}张'.format(len(os.listdir(path1))))

GIF示例

Everything提取文件的演示(手动处理同名word文件,我这里对同名文件进行替换):

附:doc转docx

介绍一下实现二者互转
需要说明的是:
要安装OFFICE,如果是使用金山WPS的,则还不能应用
转换速度略慢,但还能接受
如果想转换为其他格式文件,需要在format文件名内修改,并用如下save as 参数

代码

关于第9行、第19行代码:

第9行doc.SaveAs("{}x".format(fn), 12)
"{}x".format(fn)相当于把C:\Users\asuka\Desktop\11\123.doc变成了C:\Users\asuka\Desktop\11\123.docx,首先是指定了路径和文件名,然后12表示存储成docx格式的,保证了后缀名和格式是对应的。

第19行doc.SaveAs("{}".format(fn[:-1]), 0)
"{}".format(fn[:-1])相当于把C:\Users\asuka\Desktop\11\456.docx变成了C:\Users\asuka\Desktop\11\456.doc,指定了要另外保存的文件,保存的路径和文件名,然后0表示存储成doc格式的,保证了后缀名和格式是对应的。

from win32com import client

# 转换doc为docx
def doc2docx(fn):
    word = client.Dispatch("Word.Application")  # 打开word应用程序
    # for file in files:
    doc = word.Documents.Open(fn)  # 打开word文件
    doc.SaveAs("{}x".format(fn), 12)  # 另存为后缀为".docx"的文件,其中参数12或16指docx文件
    doc.Close()  # 关闭原来word文件
    word.Quit()

# 转换docx为doc
def docx2doc(fn):
    word = client.Dispatch("Word.Application")  # 打开word应用程序
    # for file in files:
    doc = word.Documents.Open(fn)  # 打开word文件
    doc.SaveAs("{}".format(fn[:-1]), 0)  # 另存为后缀为".docx"的文件,其中参数0指doc
    print(fn[:-1])
    doc.Close()  # 关闭原来word文件
    word.Quit()

doc2docx(r'C:\Users\asuka\Desktop\11\123.doc')
docx2doc(r'C:\Users\asuka\Desktop\11\456.docx')

到此这篇关于python提取word文件中的所有图片的文章就介绍到这了,更多相关python提取word图片内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python批量提取图片信息并保存的实现

    程序运行环境 code # -*- coding:utf-8 -*- # ----------------------------------- # @Time : 2021/2/3 9:23 # @Author : HaoWu # @File : OutPixel.py # ------------------------------------ import sys import os from glob import glob from PIL import Image sys.path.

  • python如何实现从视频中提取每秒图片

    我是在做行人检测中需要将一段视频变为图片数据集,然后想将视频每秒钟的图片提取出来. 语言:python 所需要的库:cv2,numpy (自行安装) opencv中提供了读取视频每帧图片的函数,下面的代码可以将视频的每帧图片提取出来.注:我的视频名字叫 2.mp4  ,提取图片保存目录 需要自己建一个名字叫 output 的文件夹. # 导入所需要的库 import cv2 import numpy as np # 定义保存图片函数 # image:要保存的图片名字 # addr:图片地址与相片

  • python读取raw binary图片并提取统计信息的实例

    用python语言读取二进制图片文件,并提取非零数据统计信息(例如:max,min,skewness and kurtosis) python新手,注释较少,欢迎指教 import struct import math import numpy import scipy.stats filename = input('enter file name') f = open(filename, 'rb') f.seek(0, 0) c = 0 numOfZero = 0 s = 0 num = []

  • Python Opencv提取图片中某种颜色组成的图形的方法

    主要目标识别图中红色的裂缝,尝试了几种不同的方法,最后发现比较每一点的RGB差值可以很好的解决这个问题,也就是提取图片中的红色相关信息.处理结果如下: 实现的代码如下,注意opencv读入的图片通道顺序是bgr: import cv2 import matplotlib.pyplot as plt imagepath = r'tear/11.jpg' image = cv2.imread(imagepath) height,width,channel = image.shape for i in

  • Python提取视频中图片的示例(按帧、按秒)

    一.按帧提取 #coding=utf-8 import os import cv2 def save_img(): #提取视频中图片 按照每帧提取 video_path = r'D:\\test\\' #视频所在的路径 f_save_path = 'D:\\aaa\\' #保存图片的上级目录 videos = os.listdir(video_path) #返回指定路径下的文件和文件夹列表. for video_name in videos: #依次读取视频文件 file_name = vide

  • python 三种方法提取pdf中的图片

    有时我们需要将一份或者多份PDF文件中的图片提取出来,如果采取在线的网站实现的话又担心图片泄漏,手动操作又觉得麻烦,其实用Python也可以轻松搞定! 今天就跟大家系统分享几种Python提取 PDF 图片的方法.其实没有非常完美的方法,每种方法提取效率都不是百分之百,因此可以考虑用多种方法进行互补,主要将涉及: 基于 fitz 库和正则搜索提取图片 基于 pdf2image 库的两种方法提取图片 基于 fitz 库和正则搜索 fitz 是 pymupdf 的子模块,需要先用命令行安装 pymu

  • Python实现使用卷积提取图片轮廓功能示例

    本文实例讲述了Python实现使用卷积提取图片轮廓功能.分享给大家供大家参考,具体如下: 一.实例描述 将彩色的图片生成带边缘化信息的图片. 本例中先载入一个图片,然后使用一个"3通道输入,1通道输出的3*3卷积核"(即sobel算子),最后使用卷积函数输出生成的结果. 二.代码 ''''' 载入图片并显示 首先将图片放到代码的同级目录下,通过imread载入,然后将其显示并打印出来 ''' import matplotlib.pyplot as plt # plt 用于显示图片 im

  • python实现图片处理和特征提取详解

    这是一张灵异事件图...开个玩笑,这就是一张普通的图片. 毫无疑问,上面的那副图画看起来像一幅电脑背景图片.这些都归功于我的妹妹,她能够将一些看上去奇怪的东西变得十分吸引眼球.然而,我们生活在数字图片的年代,我们也很少去想这些图片是在怎么存储在存储器上的或者去想这些图片是如何通过各种变化生成的. 在这篇文章中,我将带着你了解一些基本的图片特征处理.data massaging 依然是一样的:特征提取,但是这里我们还需要对跟多的密集数据进行处理,但同时数据清理是在数据库.表.文本等中进行.这是如何

  • python提取word文件中的所有图片

    前言 办公中,偶尔会碰到一种情况,需要提取word文档中的图片,决定写这样一款工具自动提取图片. 关于脚本的使用: 情景1:如果你拿到的是一个文件夹,所有的word文件都在这个文件夹的子目录下,深度为1层,你可以直接使用该脚本 情景2:如果你拿到的是一个文件夹,打开之后,里面杂乱无章的充斥着各种文件,你也不确定word文档都在哪,那么你需要使用Everything来手动提取出所有的word文档,虽然我也可以让脚本实现这个功能,但是使用脚本需要考虑到有可能存在同名文件,再处理起来代码量会更大,还是

  • python提取word文件中的图片并上传阿里云OSS

    该需求是一个真实的实战需求,如果你的公司在做题库类的系统,一定会涉及该方面的内容,所以收藏起来吧. 需求简单描述如下所示: 1.提取 Word(为了便于解决,统一格式为 docx)中的题干/选项图片: 2.将其传递到云 OSS 上,并返回图片地址: 3.部分场景,需要将其拼接为 HTML 的 img 标签进行返回. 实操环节 首先你需要准备好云OSS的 AccessKeyId 和 AccessKeySecret ,这两个值一般由运维工程师提供给你,如果你的公司比较小,没有运维岗位,那就需要自己去

  • 教你用python提取txt文件中的特定信息并写入Excel

    目录 问题描述: 工具: 操作: 源代码: Reference: 总结 问题描述: 我有一个这样的数据集叫test_result_test.txt,大概几百上千行,两行数据之间隔一个空行. N:505904X:0.969wsecY:0.694wsec N:506038X:4.246wsecY:0.884wsec N:450997X:8.472wsecY:0.615wsec ... 现在我希望能提取每一行X:和Y:后面的数字,然后保存进Excel做进一步的数据处理和分析 就拿第一行来说,我只需要0

  • 使用python提取html文件中的特定数据的实现代码

    例如 具有如下结构的html文件 复制代码 代码如下: <div class='entry-content'> <p>感兴趣内容1</p> <p>感兴趣内容2</p> -- <p>感兴趣内容n</p> </div> <div class='content'> <p>内容1</p> <p>内容2</p> -- <p>内容n</p>

  • Python批量提取PDF文件中文本的脚本

    本文实例为大家分享了Python批量提取PDF文件中文本的具体代码,供大家参考,具体内容如下 首先需要执行命令pip install pdfminer3k来安装处理PDF文件的扩展库. import os import sys import time pdfs = (pdfs for pdfs in os.listdir('.') if pdfs.endswith('.pdf')) for pdf1 in pdfs: pdf = pdf1.replace(' ', '_').replace('-

  • Python提取Word中图片的实现步骤

    目录 1.思路 2.具体实现 2.1导入相关库 2.2定义函数 2.3重命名word文件,将后缀名docx改为zip 2.4zip还原为docx文件,并获得图片的列表 2.5将图片复制到需要保存的文件夹中 2.6删除tmp缓冲文件夹中的文件,用以存储下一次的文件 2.7运行程序 3效果预览 3.1源word 3.2提取的图片 4附:doc转docx 1.思路 在网上查找了半天,基本都是提取word中文字的,没有找到可以把word中的图片提取出来的方法.一个巧合的情况下,发现将word的后缀名改为

  • python 实现提取log文件中的关键句子,并进行统计分析

    利用python开发了一个提取sim.log 中的各个关键步骤中的时间并进行统计的程序: #!/usr/bin/python2.6 import re,datetime file_name='/home/alzhong/logs/qtat1/R2860.01.13/sim-applycommitrollback-bld1.log' file=open(file_name,'r') acnum=[];time_res=[];lnum=0 def trans_time(time): t1=datet

  • Python从csv文件中读取数据及提取数据的方法

    目录 1.从csv文件中读取数据 2.数据切割 数据保存在csv文件中 1.从csv文件中读取数据 参数header=None的有无 (1)没有header=None--直接将csv表中的第一行当作表头 # 读取数据 import pandas as pd data = pd.read_csv("data1.csv") print(data) 打印结果为: (2)有header=None--自动添加第一行当作表头 # 读取数据 import pandas as pd data = pd

  • python从gbff文件中直接提取cds序列

    目录 什么是GBFF文件 每个序列条目所代表的意义 最后直接上代,更改输入和输出文件即可使用 什么是GBFF文件 GenBank纯文本文件格式(GenBank flatfile, 简称GBFF) GBFF是GenBank数据库的基本信息单位 GBFF序列文件由单个的序列条目组成. 序列条目由字段组成,每个字段由关键字起始,后面为该 字段的具体说明. 字段分若干次子字段,以次关键字或特性表说明符开始. 每个序列条目以双斜杠“//*作结束标记 每个序列条目所代表的意义 1. LOCUS(代码)序列的

  • Python找出文件中使用率最高的汉字实例详解

    本文实例讲述了Python找出文件中使用率最高的汉字的方法.分享给大家供大家参考.具体分析如下: 这是我初学Python时写的,为了简便,我并没在排序完后再去掉非中文字符,稍微会影响性能(大约增加了25%的时间). # -*- coding: gbk -*- import codecs from time import time from operator import itemgetter def top_words(filename, size=10, encoding='gbk'): co

随机推荐