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 庫。

更新於:2020年6月25日

13K+ 次瀏覽

啟動你的 職業生涯

完成課程獲得認證

開始學習
廣告