Python 對 gzip 檔案的支援 (gzip)
GZip 應用程式用於檔案的壓縮和解壓縮。它是 GNU 專案的一部分。Python 的 gzip 模組是 GZip 應用程式的介面。gzip 資料壓縮演算法本身基於 zlib 模組。
gzip 模組包含 GzipFile 類的定義及其方法。它還包含便捷函式 open()、compress() 和 decompress()。
實現壓縮和解壓縮最簡單的方法是使用上述函式。
open()
此函式以二進位制或文字模式開啟一個 gzip 壓縮檔案,並返回一個類似檔案的物件,該物件可以是物理檔案、字串或位元組物件。預設情況下,檔案以“rb”模式開啟,即讀取二進位制資料,但是,此函式的 mode 引數可以採用如下所示的其他模式。
binary mode: 'r', 'rb', 'a', 'ab', 'w', 'wb', 'x', 'xb' text mode : 'rt', 'at', 'wt', or 'xt'
此函式還定義了壓縮級別,其可接受值為 0 到 9 之間。當檔案以文字模式開啟時,GzipFile 物件將被包裝在 TextIOWrapper 物件中。
compress()
此函式對作為引數給出的資料進行壓縮,並返回壓縮後的位元組物件。預設壓縮級別為 9。
decompress()
此函式解壓縮位元組物件並返回未壓縮的資料。
以下示例透過將壓縮資料寫入其中來建立一個 gzip 檔案。
>>> import gzip >>> data = b'Python - Batteries included' >>> with gzip.open("test.txt.gz", "wb") as f: f.write(data)
這將在當前目錄中建立“test.txt.gz”檔案。此 gzip 存檔包含“test.txt”,您可以使用任何解壓縮實用程式進行驗證。
以程式設計方式讀取此壓縮檔案
>>> with gzip.open("test.txt.gz", "rb") as f: data = f.read() >>> data b'Python - Batteries included'
要將現有檔案壓縮到 gzip 存檔,請讀取其中的文字並將其轉換為 bytearray。然後將此 bytearray 物件寫入 gzip 檔案。在下面的示例中,假設“zen.txt”檔案存在於當前目錄中。
fp = open("zen.txt","rb") >>> data = fp.read() >>> bindata = bytearray(data) >>> with gzip.open("zen.txt.gz", "wb") as f: f.write(bindata)
從 gzip 存檔檢索解壓縮的檔案
>>> fp = open("zen1.txt", "wb") >>> with gzip.open("zen.txt.gz", "rb") as f: bindata = f.read() >>> fp.write(bindata) >>> fp.close()
以上程式碼將在當前目錄中建立“zen1.txt”,其內容與“zen.txt”相同。
除了這些便捷函式之外,gzip 模組還具有 GzipFile 類,該類定義了 compress() 和 decompress() 方法。此類的建構函式採用 file、mode 和 compressionlevel 引數,其含義與上述完全相同。
當 mode 引數設定為“w”、“wb”或“wt”時,GipFile 物件將提供 write() 方法來壓縮給定資料並寫入 gzip 檔案。
>>> f = gzip.GzipFile("testnew.txt.gz","wb") >>> data = b'Python - Batteries included' >>> f.write(data) >>> f.close()
這將建立一個 testnew.txt.gz 檔案。您可以使用任何實用程式解壓縮它,以檢視它是否包含包含“Python – Batteries included”文字的 testnew.txt。
要使用 GzipFile 物件解壓縮 gzip 檔案,請將其 mode 引數設定為“rb”,並使用 read() 方法讀取解壓縮的資料。
>>> f = gzip.GzipFile("testnew.txt.gz","rb") >>> data = f.read() >>> data b'Python - Batteries included'
在本文中,我們學習瞭如何透過 Python 的 gzip 模組實現 gzip 庫。