gzip 模組



我們使用 GZip 應用程式來壓縮和解壓縮檔案。它是 GNU 專案的一部分。Python 的 gzip 模組是 GZip 應用程式的介面。gzip 資料壓縮演算法本身基於 zlib 模組。

gzip 模組包含 GzipFile 類的定義及其方法。它還包含便利函式 open()、compress() 和 decompress()。

讓我們討論一下這些函式 -

open() 函式

此函式以二進位制或文字模式開啟一個 gzip 壓縮檔案,並返回一個類似檔案的物件,該物件可以是物理檔案、字串或位元組物件。預設情況下,檔案以 'rb' 模式開啟,即讀取二進位制資料,但是,此函式的 mode 引數可以採用下面列出的其他模式 -

  • 二進位制模式 - 'r'、'rb'、'a'、'ab'、'w'、'wb'、'x'、'xb'。

  • 文字模式 - 'rt'、'at'、'wt' 或 '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:
   print (f.read())

輸出

b'Python - Batteries included'

要將現有檔案壓縮到 gzip 存檔中,請讀取其中的文字並將其轉換為位元組陣列。然後將此位元組陣列物件寫入 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 檔案。您可以使用任何實用程式解壓縮它,以檢視它是否包含 testnew.txt,其中包含“Python - Batteries included”文字。

要使用 GzipFile 物件解壓縮 gzip 檔案,請使用 'rb' 值建立它作為 mode 引數,並透過 read() 方法讀取未壓縮的資料。

f=gzip.GzipFile("testnew.txt.gz","rb")
data=f.read()
print (data)
python_data_compression.htm
廣告