- Python程序設(shè)計(jì)
- 張雪萍主編
- 988字
- 2019-06-19 15:48:35
3.5 處理壓縮文件
在3.1節(jié)、3.2節(jié)已經(jīng)介紹了os模塊,該模塊主要提供基本的對文件和目錄的處理,在實(shí)際應(yīng)用中,還會經(jīng)常對文件進(jìn)行壓縮和解壓。當(dāng)然,有專門的壓縮軟件和解壓軟件支持這項(xiàng)操作,但這里將介紹如何利用Python編寫代碼來完成對文件的壓縮和解壓。
使用 Python 可以解壓以下 5 種格式的壓縮文件:.gz、.tar、.tgz、.zip、.rar,但這里只介紹對.zip文件的壓縮和解壓處理,對其他壓縮文件的操作請大家查閱相關(guān)文件。
Python中的zipfile模塊可以對文件進(jìn)行壓縮和解壓操作[9,10]。
假設(shè)在本地磁盤有文件“D:\PythonTest\zipfile_document\word_document.rar”和文件“D:\PythonTest\zipfile_document\word_document.zip”,請觀察以下命令執(zhí)行的情況:


這里,利用“os.path.join()”得到兩個文件的完整路徑:
D:\PythonTest\zipfile_document\word_document.rar;
D:\PythonTest\zipfile_document\word_document.zip.
下面將介紹zipfile模塊的namelist()方法,該方法得到的是一個列表。
【例3-22】 zipfile模塊的namelist()方法的使用。

說明:輸出列表中的第一個元素是文件夾名,不是文件名。
注意:namelist()方法能夠獲取指定壓縮文件里的所有文件名(包括子文件夾下的文件),返回的是一個列表,但是文件夾(包括子文件夾)的名字出現(xiàn)在列表的前面,之后才是文件名,所有文件按照目錄層次列出。
【例3-23】 解壓指定目錄下的壓縮文件并保存到指定的文件夾下。


程序運(yùn)行后請打開資源管理器查看結(jié)果。
注意:代碼中“os.mkdir(path)”的作用是創(chuàng)建一個新的文件夾,mkdir()在使用時必須確保要創(chuàng)建的新文件夾不存在,否則會報錯!
【例 3-24】 壓縮指定目錄下文件夾內(nèi)的文件,壓縮文件中只添加一級子目錄下的文件。

注意:本例中的代碼只能將指定文件夾中的全部文件添加到壓縮包里,不能將文件夾中子文件夾里的文件添加到壓縮包中,即當(dāng)解壓壓縮后的文件時,會發(fā)現(xiàn)子文件夾是空的。請運(yùn)行本程序后打開資源管理器進(jìn)行查看,理解這里所說的情形。
【例 3-25】 對整個文件夾進(jìn)行壓縮,把下級子文件夾里的文件也添加到壓縮文件中,但仍然保持原有的目錄結(jié)構(gòu)。

同樣,請運(yùn)行本程序后打開資源管理器進(jìn)行查看,理解程序的功能。
zipfile 模塊還有很多有用的方法(見表3-6),更多操作請大家上機(jī)進(jìn)行測試。

上述命令利用 zipfile 模塊提供的 ZipFile()類構(gòu)造了一個 zipfile 文件對象,同時打開指定的名為“filename”的.zip 文件。打開壓縮文件的模式(mode)可以是'r'、'w'、'a',分別代表打開文件的不同的方式。'r'表示解壓文件,'w'和'a'表示壓縮文件。壓縮標(biāo)志“compression”指明了這個 zipfile 文件的壓縮方法,默認(rèn)是 ZIP_STORED,另一種選擇是 ZIP_DEFLATED。allowZip64 是個 bool 型變量,當(dāng)設(shè)置為 True 時可以用來創(chuàng)建大于2GB的.zip文件,默認(rèn)值是True[9~11]。
表3-6 zipfile模塊的常用方法

續(xù)表

【例3-26】 輸出指定目錄下的.zip文件里的文件信息。

- Getting Started with Gulp(Second Edition)
- Learning AWS Lumberyard Game Development
- Java Web程序設(shè)計(jì)
- The Data Visualization Workshop
- Visual Basic程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)(第4版)
- iOS編程基礎(chǔ):Swift、Xcode和Cocoa入門指南
- Java Web程序設(shè)計(jì)任務(wù)教程
- 自然語言處理Python進(jìn)階
- Python數(shù)據(jù)結(jié)構(gòu)與算法(視頻教學(xué)版)
- Android應(yīng)用案例開發(fā)大全(第二版)
- Getting Started with Nano Server
- 動手打造深度學(xué)習(xí)框架
- 從程序員角度學(xué)習(xí)數(shù)據(jù)庫技術(shù)(藍(lán)橋杯軟件大賽培訓(xùn)教材-Java方向)
- C指針原理揭秘:基于底層實(shí)現(xiàn)機(jī)制
- 零基礎(chǔ)輕松學(xué)C++:青少年趣味編程(全彩版)