Python提取PPT中的圖片
一、前言
今天要帶大家實(shí)現(xiàn)的是PPT圖片的提取。在我們學(xué)習(xí)工作中,PPT的使用還是非常頻繁的,但是自己做PPT是很麻煩的,所以就需要用到別人的模板或者素材,這個(gè)時(shí)候提取PPT圖片就可以減少我們很多工作。
二、實(shí)現(xiàn)原理
其實(shí)實(shí)現(xiàn)原理很簡(jiǎn)單,我們的pptx文件其實(shí)是一個(gè)壓縮包。我們可以直接修改pptx文件的后綴,改成zip然后解壓,比如下面這個(gè):

這是解壓后的文件。我們可以在ppt目錄下找到一個(gè)media目錄,這個(gè)目錄下就是我們要的圖片的。這個(gè)目錄包含了PPT的所有多媒體文件。
知道這點(diǎn)后,我們就可以選擇用Python來(lái)解壓出PPT中的media目錄就可以提取出所有圖片了。
三、提取PPT中的圖片
1、打開(kāi)壓縮包
在Python中提供了一個(gè)zipfile模塊用于處理壓縮包文件。我們來(lái)看看它的簡(jiǎn)單操作:
from?zipfile?import?ZipFile
#?打開(kāi)壓縮文件
f?=?ZipFile("test.pptx")
#?查看壓縮包所有文件
for?file?in?f.namelist():
????print(file)
#?關(guān)閉壓縮包文件
f.close()
輸出的部分結(jié)果如下:
[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、解壓文件
我們還可以通過(guò)下面的方式打開(kāi)壓縮包:
from?zipfile?import?ZipFile
with?ZipFile("test.pptx")?as?f:
????for?file?in?f.namelist():
????????print(file)
通過(guò)with語(yǔ)句,就可以不顯示地調(diào)用close方法。下面我們看看解壓操作:
from?zipfile?import?ZipFile
with?ZipFile("test.pptx")?as?f:
????for?file?in?f.namelist():
????????#?解壓文件
????????f.extract(file,?path="unzip")
解壓文件的操作通過(guò)f.extract來(lái)實(shí)現(xiàn),這里傳入了兩個(gè)參數(shù),分別是壓縮包文件,和解壓路徑,如果壓縮包有密碼還需要傳入解壓密碼。
然后我們還需要判斷一下,如果是媒體目錄我們才解壓。我們添加一點(diǎn)代碼:
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")
這樣我們就實(shí)現(xiàn)了PPT圖片的提取。
四、提取PPT中的圖片
我們把上面代碼再完善一下:
import?os
from?zipfile?import?ZipFile
#?解壓目錄
unzip_path?=?"unzip"
#?如果解壓目錄不存在則創(chuàng)建
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)
這里我們就是添加了一個(gè)解壓目錄的創(chuàng)建,這樣我們執(zhí)行的時(shí)候就不會(huì)因?yàn)槟夸洸淮嬖诙鴪?bào)錯(cuò)了。
另外,其實(shí)我們手動(dòng)解壓然后提取PPT中的圖片也是很方便的,也并不會(huì)比程序慢。

各位伙伴們好,詹帥本帥搭建了一個(gè)個(gè)人博客和小程序,匯集各種干貨和資源,也方便大家閱讀,感興趣的小伙伴請(qǐng)移步小程序體驗(yàn)一下哦!(歡迎提建議)
推薦閱讀
牛逼!Python常用數(shù)據(jù)類(lèi)型的基本操作(長(zhǎng)文系列第①篇)
牛逼!Python的判斷、循環(huán)和各種表達(dá)式(長(zhǎng)文系列第②篇)
推薦閱讀
牛逼!Python常用數(shù)據(jù)類(lèi)型的基本操作(長(zhǎng)文系列第①篇)
牛逼!Python的判斷、循環(huán)和各種表達(dá)式(長(zhǎng)文系列第②篇)
