python提取PPT中的图片
一、实现原理
其实实现原理很简单,我们的pptx文件其实是一个压缩包。我们可以直接修改pptx文件的后缀,改成zip然后解压,比如下面这个:
这是解压后的文件。我们可以在ppt目录下找到一个media目录,这个目录下就是我们要的图片的。这个目录包含了PPT的所有多媒体文件。
知道这点后,我们就可以选择用Python来解压出PPT中的media目录就可以提取出所有图片了。
二、提取PPT中的图片
1、打开压缩包
在Python中提供了一个zipfile模块用于处理压缩包文件。我们来看看它的简单操作:
1 2 3 4 5 6 7 8 | from zipfile import ZipFile # 打开压缩文件 f = ZipFile( "test.pptx" ) # 查看压缩包所有文件 for file in f.namelist(): print ( file ) # 关闭压缩包文件 f.close() |
输出的部分结果如下:
1 2 3 4 5 6 7 | [Content_Types].xml _rels / .rels ppt / presentation.xml ppt / slides / _rels / slide2.xml.rels ppt / slides / slide1.xml ppt / slides / slide2.xml ppt / slides / slide3.xml |
可以看到我们打印出了压缩包的文件。
2、解压文件
我们还可以通过下面的方式打开压缩包:
1 2 3 4 | from zipfile import ZipFile with ZipFile( "test.pptx" ) as f: for file in f.namelist(): print ( file ) |
通过with
语句,就可以不显示地调用close方法。下面我们看看解压操作:
1 2 3 4 5 | from zipfile import ZipFile with ZipFile( "test.pptx" ) as f: for file in f.namelist(): # 解压文件 f.extract( file , path = "unzip" ) |
解压文件的操作通过f.extract
来实现,这里传入了两个参数,分别是压缩包文件,和解压路径,如果压缩包有密码还需要传入解压密码。
然后我们还需要判断一下,如果是媒体目录我们才解压。我们添加一点代码:
1 2 3 4 5 6 | from zipfile import ZipFile with ZipFile( "test.pptx" ) as f: for file in f.namelist(): # 如果是media目录下的文件就解压 if file .startswith( "ppt/media/" ): f.extract( file , path = "unzip" ) |
这样我们就实现了PPT图片的提取。
三、提取PPT中的图片
我们把上面代码再完善一下:
1 2 3 4 5 6 7 8 9 10 11 | import os from zipfile import ZipFile # 解压目录 unzip_path = "unzip" # 如果解压目录不存在则创建 if not os.path.exists(unzip_path): os.mkdir(unzip_path) with ZipFile( "test1/test.pptx" ) as f: for file in f.namelist(): if file .startswith( "ppt/media/" ): f.extract( file , path = unzip_path) |
这里我们就是添加了一个解压目录的创建,这样我们执行的时候就不会因为目录不存在而报错了。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
2017-03-31 selenium 加载jquery
2017-03-31 获取html元素的XPath路径
2015-03-31 Test Double