使用 Python 處理 ZIP 壓縮檔案 (zipfile)
ZIP 是最流行的檔案格式之一,用於歸檔和壓縮。它自 MSDOS 和 PC 時代就已存在,並被著名的 PKZIP 應用程式使用。
Python 標準庫中的 zipfile 模組提供了用於建立、提取、讀取和寫入 ZIP 壓縮檔案的類。
ZipFile()
此函式從檔案引數返回一個 ZipFile 物件,該引數可以是字串或由內建 open() 函式建立的檔案物件。該函式需要一個 mode 引數,其預設值為 'r',儘管它可以採用 'w' 或 'a' 值,分別以讀取、寫入或追加模式開啟壓縮檔案。
預設情況下,壓縮檔案未壓縮。要指定要使用的壓縮演算法型別,必須將其中一個常量分配給 compression 引數。
| zipfile.ZIP_STORED | 用於未壓縮的壓縮檔案成員。 |
| zipfile.ZIP_DEFLATED | 用於常用的 ZIP 壓縮方法。這需要 zlib 模組。 |
| zipfile.ZIP_BZIP2 | 用於 BZIP2 壓縮方法。這需要 bz2 模組。 |
| zipfile.ZIP_LZMA | 用於 LZMA 壓縮方法。這需要 lzma 模組。 |
ZipFile 物件使用以下方法。
write()
此方法將檔案新增到由 ZipFile 物件表示的壓縮檔案中。
>>> import zipfile
>>> newzip=zipfile.ZipFile('newdir/newzip.zip','w')
>>> newzip.write('zen.txt')
>>> newzip.close()可以透過以追加模式 ('a' 作為模式) 開啟現有壓縮檔案來向其中新增其他檔案。
>>> newzip=zipfile.ZipFile('newdir/newzip.zip','a')
>>> newzip.write('zen.txt')
>>> newzip.close()read()
此方法讀取壓縮檔案中特定檔案的 data。
>>> newzip=zipfile.ZipFile('newdir/newzip.zip','r')
>>> data=newzip.read('json.txt')
>>> data
b'["Rakesh", {"marks": [50, 60, 70]}]'printdir()
此方法列出給定壓縮檔案中的所有檔案。
>>> newzip.printdir() File Name Modified Size json.txt 2018-11-2717:04:40 35 zen.txt 2018-11-2523:13:44 878
extract()
此方法預設將指定檔案從壓縮檔案提取到當前目錄或作為第二個引數給出的目錄中。
>>> newzip.extract('json.txt','newdir')
'newdir\json.txt'extractall()
此方法預設將壓縮檔案中的所有檔案提取到當前目錄。如果需要,請指定備用目錄作為引數。
>>> newzip.extractall('newdir')getinfo()
此方法返回對應於給定檔案的 ZipInfo 物件。ZipInfo 物件包含檔案的不同元資料資訊。
以下程式碼從壓縮檔案中獲取 'zen.txt' 的 ZipInfo 物件,並從中檢索檔名、大小和日期時間資訊。
>>> inf = newzip.getinfo('zen.txt')
>>> inf.filename,inf.file_size, inf.date_time
('zen.txt', 878, (2018, 11, 25, 23, 13, 45))infolist()
此方法返回壓縮檔案中所有檔案的 ZipInfo 物件列表。
>>> newzip.infolist() [<ZipInfo filename = 'json.txt' filemode='-rw-rw-rw-' file_size=35>, <ZipInfo filename = 'zen.txt' filemode='-rw-rw-rw-' file_size=878>]
如前所述,在構建 ZIP 壓縮檔案時要應用的壓縮演算法在 compression 引數中指定。在以下程式碼中,ZIP-DEFLATED 常量使用 zlib 壓縮構建壓縮檔案。
>>> zipobj = zipfile.ZipFile('txtzip.zip',mode='w', compression=zipfile.ZIP_DEFLATED)
>>> files=glob.glob("*.txt")
>>> for file in files:
zipobj.write(file)
>>> zipobj.close()namelist()
ZipFile 物件的此方法返回壓縮檔案中所有檔案的列表。
>>> zipobj = zipfile.ZipFile('txtzip.zip',mode='r')
>>> zipobj.namelist()
['a!.txt', 'data().txt', 'dict.txt', 'json.txt', 'LICENSE.txt', 'lines.txt', 'msg.txt', 'NEWS.txt', 'test.txt/', 'zen.txt', 'zen1.txt', 'zenbak.txt']setpassword()
此方法設定密碼引數,該引數必須在提取壓縮檔案時提供。
PyZipFile()
zipfile 模組中的此函式返回 PyZipFile 物件。PyZipFile 物件可以構建包含副檔名為 .py 的檔案的模組。此壓縮檔案可以新增到 sys.path 環境變數中,以便可以使用 zipimport 模組匯入該模組。
writepy() 方法在將 .py 檔案編譯到相應的 .pyc 檔案後將其新增到壓縮檔案中。
files=glob.glob("*.py")
>>> pyzipobj = zipfile.PyZipFile('pyfiles/pyzip.zip', mode='w', compression=zipfile.ZIP_LZMA)
>>> for file in files:
pyzipobj.writepy(file)
>>> pyzipobj.close()本文討論了 zipfile 模組中的類和函式。
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP