Python ZIP 文件創建與讀取


Automate the Boring Stuff 學習筆記 02

Python 內置的 zipfile 模塊可以對文件(夾)進行ZIP格式的壓縮和讀取操作。要進行相關操作,首先需要實例化一個 ZipFile 對象。ZipFile 接受一個字符串格式壓縮包名稱作為它的必選參數,第二個參數為可選參數,表示打開模式,類似於文件操作,有r/w/a三種模式,分別代表讀、寫、添加,默認為r,即讀模式。

1. zip 文件查看

假設當前有如下文件結構:

The contents of example.zip

代碼演示如下:

>>> import zipfile, os
>>> os.chdir(‘C:\\’) # move to the folder with example.zip
>>> exampleZip = zipfile.ZipFile(‘example.zip’)
>>> exampleZip.namelist()
[‘spam.txt’, ‘cats/’, ‘cats/catnames.txt’, ‘cats/zophie.jpg’]
>>> spamInfo = exampleZip.getinfo(‘spam.txt’)
>>> spamInfo.file_size
13908
>>> spamInfo.compress_size
3828
>>> ‘Compressed file is %sx smaller!’ % (round(spamInfo.file_size / spamInfo
.compress_size, 2))
‘Compressed file is 3.63x smaller!’
>>> exampleZip.close()

如上代碼所示,ZipFile 對象擁有一個名為 namelist() 的方法,該方法返回一個所含該壓縮包所有文件及文件夾的字符串列表。可以把返回的列表中的字符串傳遞到 getinfo() 方法中,以獲取特定文件或文件夾的更多信息。getinfo() 方法還擁有以下屬性:

  • file_size 可獲得原文件或文件夾大小
  • compress_size 或獲得壓縮后的文件或文件夾大小

2. zip文件解壓

利用 ZipFile 對象的 extractall() 方法可以對整個壓縮包進行解壓。extractall() 方法接受一個絕對路徑名稱字符串為可選參數,解壓后的文件將會入在傳入的目錄中。示例代碼如下:

>>> import zipfile, os
>>> os.chdir(‘C:\\’) # move to the folder with example.zip
>>> exampleZip = zipfile.ZipFile(‘example.zip’)
>>> exampleZip.extractall()
>>> exampleZip.close()

上例中,extractall() 方法沒有被傳入參數,因為文件被解壓到當前的工作目錄中。如果被傳入的目錄不存在,則Python將新建該目錄。

也可以利用 ZipFile 對象的 extract() 方法對壓縮包中的某個特定文件進行解壓,extract() 方法的使用示例如下:

>> exampleZip.extract(‘spam.txt’)
‘C:\\spam.txt’
>>> exampleZip.extract(‘spam.txt’, ‘C:\\some\\new\\folders’)
‘C:\\some\\new\\folders\\spam.txt’
>>> exampleZip.close()

如上所示,當 extract() 方法可接收一個壓縮包中的文件名作為參數,將其解壓到當前目錄中。也可以用一個絕對路徑名稱字符串作為該方法的第二個參數,將特定文件解壓到該目錄中,如果該目錄不存在,Python程序將新建該目錄。

3. 創建和增加文件到 ZIP 文件中

創建ZIP文件需要使用寫模式,即將壓縮包名稱和寫模式代號分別作為ZipFile方法的第一、第二個參數傳入。示例代碼如下:

>>> import zipfile
>>> newZip = zipfile.ZipFile(‘new.zip’, ‘w’)
>>> newZip.write(‘spam.txt’, compress_type=zipfile.ZIP_DEFLATED)
>>> newZip.close()

以上第二行代碼新建了一個名為 new.zip 的壓縮文件,並以寫模式打開。第三行中用 ZipFile 對象的 write() 方法添加文件到壓縮包中,該方法的第一個參數為需要添加進去的文件名,第二個參數為壓縮算法,通常使用如上代碼中的 ZIP_DEFLATED 即可。需要注意的是,類似於文件的寫操作,如果目錄中已存在同名的壓縮文件,則原有文件將會被重寫!如果需要繼續添加文件到已有的壓縮文件中,則在實例化 ZipFile 對象時,使用 ‘a’ 作為第二個參數即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM