python文本抽取框架,GUI实战|Python做一个文档图片提取软件

大家好,在上周的办公自动化系列文章中,我们已经讲解了如何用Python读取与写入Excel图片,在上上周的GUI系列文章中,也讲解了如何制作一个图片查看软件。

本文将进一步讲解如何用Python提取PDF与Word中图片,并结合之前讲解过的GUI框架PysimpleGUI,做一个多文件图片提取软件,效果如下:

9610d408e73c4838e230127268c5346d.png

本文主要将分为以下部分讲解:PDF、Word、Excel文件图片提取

构造图片提取器GUI框架

整合代码并打包

f37afdf37f94b7904e915c2fd3cec46e.png

主要涉及的Python模块有:PIL

PySimpleGUI

re

win32

os

zipfile

fitz

准备工作

首先使用pip安装相关依赖模块pip install pillow   #这是对模块PTL的安装

pip install pypiwin32    #这是对win32的安装

pip install os

pip install zipfile

pip install PyMuPDF  #这是引用fitz对PDF操作的包

pip install PySimpleGui

一、提取各文件内嵌图片

在之前的文章有讲过,读取Excel有两种方法。一种是将后缀名改成.zip格式进行提取,一种是通过Pillow模块对Excel进行图片复制与保存。而在我们这次3种文件格式的图片提取当中,Excel提取图片方法和之前一样。

Word提取图片方法和通过.zip提取方法类似,PDF提取图片方法要用到新的模块。由于Excel提取图片的两种方法在之前的文章讲过,故这里只讲解PDF和Word的提取方法。

1.1 提取Word图片思路

和以前一样,我们先看代码再讲解path = values["lujing"]

count = 1

for file in os.listdir(path):

new_file = file.replace(".docx",".zip")

os.rename(os.path.join(path,file),os.path.join(path,new_file))

count+=1

number = 0

craterDir = values["lujing"] + '/'  # 存放zip文件的文件夹路径

saveDir = values["lujing"] + '/' # 存放图片的路径

list_dir = os.listdir(craterDir) # 获取所有的zip文件名

for i in range(len(list_dir)):

if 'zip' not in list_dir[i]:

list_dir[i] = ''

while '' in list_dir:

list_dir.remove('')

for zip_name in list_dir:

# 默认模式r,读

azip = zipfile.ZipFile(craterDir + zip_name)

# 返回所有文件夹和文件

namelist = (azip.namelist())

for idx in range(0,len(namelist)):

if namelist[idx][:11] == 'word/media/':#图片是在这个路径下

img_name = saveDir + str(number)+'.jpg'

f = azip.open(namelist[idx])

img = Image.open(f)

img = img.convert("RGB")

img.save(img_name,"JPEG")

number += 1

azip.close()  #关闭文件,必须有,释放内存

这里的代码和GUI中通过.zip方式提取Excel图片的代码思路是一样的。“

path = values["lujing"]这里是读取GUI中键为**“lujing”**的值,也即文件存储位置,用于os模块读取与操作。

new_file = file.replace(".docx",".zip")是替换后缀名,如果是Excel的话,就把.docx改成.xlsx或xls。

craterDir = values["lujing"] + '/'  这是存放zip文件的文件夹路径,注意这里读取到的键为“lujing”的值后要在后面添加/。

saveDir = values["lujing"] + '/'  这是存放图片的路径,同理,和上面一样加个/号。”

最后说一下与Excel提取相比,最大的不同是下面的代码

if namelist[idx][:11] == 'word/media/':细心的读者可以发现,与Excel提取相比,中括号里面的值改了。

很好理解,我们可以打印namelist[idx],可以发现在索引0到10是'word/media/'所在位置。而在Excel中是前9位。

感兴趣的读者可以翻看之前的文章,那里有对这段代码的详细解析,这里不多做介绍。

1.2 提取PDF图片思路

和之前的excel提取图片一样,在一个pdf中放入4张图片,我们将它压缩为zip文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值