zlib --- 相容於 gzip 的壓縮


For applications that require data compression, the functions in this module allow compression and decompression, using the zlib library.

This is an optional module. If it is missing from your copy of CPython, look for documentation from your distributor (that is, whoever provided Python to you). If you are the distributor, see 可選模組的需求.

zlib 的函式有很多選項,且通常需要按特定順序使用。本文件並不打算解說所有選項排列組合的效果;相關官方資訊,請參閱 zlib 手冊

若要讀寫 .gz 文件,請參閱 gzip 模組。

該模組中可用的例外和函式是:

exception zlib.error

當壓縮和解壓縮發生錯誤時引發的例外。

zlib.adler32(data[, value])

計算 data 的 Adler-32 核對和 (checksum)。(Adler-32 核對和幾乎與 CRC32 一樣可靠,但計算速度更快。)結果是一個 unsigned(無符號的)32-bit 整數。如果有提供 value,則將其用作核對和的起始值,否則使用預設值 1。傳入 value 允許了於多個輸入的串聯 (concatenation) 上計算核對和。該演算法的加密強度不夠高,不該用於身份驗證 (authentication) 或數位簽章 (digital signature)。由於該演算法是為核對和演算法而設計的,它並不適合作為通用的雜湊演算法。

在 3.0 版的變更: 結果總是為 unsigned。

zlib.compress(data, /, level=Z_DEFAULT_COMPRESSION, wbits=MAX_WBITS)

壓縮 data 中的位元組,回傳一個包含壓縮資料的位元組物件。 level 是從 09-1 的整數,控制了壓縮的級別;請見 Z_BEST_SPEED (1)、Z_BEST_COMPRESSION (9)、Z_NO_COMPRESSION (0),以及預設值 Z_DEFAULT_COMPRESSION (-1) 以得到更多關於這些值的資訊。

wbits 引數控制了壓縮資料時所使用的歷史紀錄緩衝區 (history buffer) 大小(或「視窗大小」),以及輸出中是否包含標題和尾末 (trailer)。它可以採用多個值的範圍,預設為 15 (MAX_WBITS):

  • +9 到 +15:視窗大小的以二為底的對數,因此範圍在 512 到 32768 之間。較大的值會產生更佳的壓縮,但會佔用更多的記憶體。生成輸出將包含特定於 zlib 的標頭和尾末。

  • −9 到 −15:使用 wbits 的絕對值作為視窗大小的對數,同時生成沒有標頭或尾末核對和的原始輸出串流。

  • +25 到 +31 = 16 +(9 到 15):使用數值的最低 4 位元作為視窗大小的對數,同時在輸出中包含基本的 gzip 標頭和尾末核對和。

如果發生任何錯誤,則引發 error 例外。

在 3.6 版的變更: level 現在可以用作關鍵字參數。

在 3.11 版的變更: wbits 參數現在可用於設定視窗位元和壓縮型別。

zlib.compressobj(level=Z_DEFAULT_COMPRESSION, method=DEFLATED, wbits=MAX_WBITS, memLevel=DEF_MEM_LEVEL, strategy=Z_DEFAULT_STRATEGY[, zdict])

回傳一個壓縮物件,用於壓縮不能一次全部放入記憶體中的資料串流。

level is the compression level -- an integer from 0 to 9 or -1. See Z_BEST_SPEED (1), Z_BEST_COMPRESSION (9), Z_NO_COMPRESSION (0), and the default, Z_DEFAULT_COMPRESSION (-1) for more information about these values.

method 代表壓縮演算法。目前唯一支援的值是 DEFLATED

wbits 參數控制歷史紀錄緩衝區的大小(或「視窗大小」),以及將使用的標頭和尾末格式。它與前面敘述的 compress() 具有相同的含義。

memLevel 引數控制用於內部壓縮狀態的記憶體大小。有效值範圍為 19。較高的值會使用更多的記憶體,但速度更快並產生更小的輸出。

strategy 被用於調整壓縮演算法。可用的值為 Z_DEFAULT_STRATEGYZ_FILTEREDZ_HUFFMAN_ONLYZ_RLEZ_FIXED

zdict 是事先定義好的的壓縮字典。這是一個位元組序列(例如一個 bytes 物件),其中包含預期在要壓縮的資料中頻繁出現的子序列。那些預期會最常見的子序列應該出現在字典的尾末。

在 3.3 版的變更: 新增 zdict 參數與支援關鍵字引數。

zlib.crc32(data[, value])

計算 data 的 CRC(Cyclic Redundancy Check,循環冗餘核對)核對和,結果會是一個 unsigned 32-bit 整數。如果 value 存在,則將其用作核對和的起始值,否則使用預設值 0。傳入 value 允許在多個輸入的串聯上計算核對和。該演算法的加密強度不夠高,不該用於身份驗證或數位簽章。由於該演算法是為核對和演算法而設計的,它並不適合作為通用的雜湊演算法。

在 3.0 版的變更: 結果總是為 unsigned。

zlib.decompress(data, /, wbits=MAX_WBITS, bufsize=DEF_BUF_SIZE)

解壓縮 data 中的位元組,回傳包含未壓縮資料的位元組物件。 wbits 參數依賴於 data 的格式,下面將進一步討論。如果有給定 bufsize,它會被用作輸出緩衝區的初始大小。如果發生任何錯誤,則引發 error 例外。