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.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:
dswith('png') dswith('jpg') dswith('jpeg'):  # 设置图⽚类型是这种
move_f = current_folder + '\\' + f  # 给出要移动的⽂件的路径
new_file_path = path1 + '\\' + str(count) + '.' + f.rpartition('.')[-1]  # 指定新⽂件的⽂件路径,⽂件名数字递增,⽂件后缀
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.ad())
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(panduser("~"), 'Desktop')  # 获取桌⾯路径
path1 = os.path.join(desktop_path, '所有word⽂件中的图⽚')
os.makedirs(path1)
files = os.listdir(path)  # 获取指定⽂件夹下的所有⽂件
for file in files:  # 遍历指定⽂件夹下的所有⽂件
dswith('docx'):  # 加⼀个判断,这样即使path路径下有别的类型⽂件也⽆妨
filename = file.rpartition('.')[0]  # 获取⽂件的⽂件名
file_path = os.path.join(path, filename)
os.makedirs(file_path)  # 为获取到的⽂件名创建⼀个⽂件夹
python怎么读取桌面上的文件
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图⽚内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。