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

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

本文主要将分为以下部分讲解:

  • PDF、Word、Excel文件图片提取
  • 构造图片提取器GUI框架
  • 整合代码并打包

主要涉及的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改成.xlsxxls

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文件©著作权归作者所有:来自51CTO博客作者mb5fe18e32e4691的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 如何用Python读取Excel中图片?又如何用Python往Excel中写入图片?
  2. PySimpleGUI 进阶| 原来用Python做一个图片查看系统,还能这么简单!
  3. 附实战代码|告别OS模块,体验Python文件操作新姿势!
  4. 让Python在后台自动解压各种压缩文件!
  5. 10行Python代码自动清理电脑内重复文件,解放双手!
  6. 用Python打造一款文件搜索工具,所有功能自己定义!
  7. Python办公自动化|自动整理文件,一键完成!
  8. Python地信专题 | 基于geopandas的空间数据分析-文件IO篇
  9. n种方式教你用python读写excel等数据文件

随机推荐

  1. 安装Python3.6.3+spyder
  2. Python:2D Numpy数组(矩阵) - 查找负数之和(
  3. python学习的第一天---
  4. 如何在python中使用命名组和datadict从正
  5. 【问题解决方案】ImportError: No module
  6. 120行python代码解锁10000分微信跳一跳
  7. 使用特定顺序的ID列表从Django数据库中获
  8. Python3入门(六)——函数式编程
  9. Python中psutil模块的安装
  10. python环境配置问题及解决办法集锦