Python 中與 gzip 相容的壓縮(zlib)


zlib 模組提供了 Python 對 Zlib 壓縮庫 (http://www.zlib.net) 的實現,它是 GNU 專案的一部分。

本文討論了 zlib 模組中定義的重要函式。

compress()

此函式與 decompress() 函式一起是此模組的主要介面。此函式透過壓縮作為引數給定的資料來返回位元組物件。該函式還有另一個名為 level 的引數,它控制壓縮程度。它是一個介於 0 到 9 之間的整數。最低值 0 表示不壓縮,9 表示最佳壓縮。壓縮級別越高,壓縮後的位元組物件長度越長。

decompress()

此函式執行與 compress() 函式相反的操作。它檢索未壓縮的資料。此函式可以有一個可選引數,稱為 wbits,它控制歷史緩衝區的大小以及標題和尾部格式的性質。

以下語句使用 compress() 函式壓縮字串物件

>>> import zlib
>>> c = zlib.compress(b'hello python')
>>> c
b'x\x9c\xcbH\xcd\xc9\xc9W(\xa8,\xc9\xc8\xcf\x03\x00\x1e\xf0\x04\xd7'

而 decompress() 函式檢索原始 Python 字串。

>>> zlib.decompress(c)
b'hello python'

該模組包含定義了兩個相應的壓縮和解壓縮物件類。

compressobj() - 此建構函式返回用於壓縮資料流的壓縮物件。此物件的兩個重要方法是

compress() - 返回壓縮後的位元組物件。

flush() - 由於壓縮物件處理的是流,因此緩衝區中可能仍有一些壓縮資料。此方法清空緩衝區。

以下示例設定壓縮物件並透過將重新整理後的資料新增到 compress() 方法的返回值來構造壓縮資料物件。

>>> s1 = b'hello python'
>>> c = zlib.compressobj()
>>> s2 = c.compress(s1)
>>> s2 = s2+c.flush()
>>> s2
b'x\x9c\xcbH\xcd\xc9\xc9W(\xa8,\xc9\xc8\xcf\x03\x00\x1e\xf0\x04\xd7'

decompressobj() - 此方法充當解壓縮物件的建構函式,該物件從流中解壓縮大量資料。此物件提供以下方法

decompress() - 此方法返回未壓縮的資料

flush() - 此方法清空緩衝區。

以下程式碼從上一個示例中建立的位元組物件中檢索未壓縮的資料

>>> d = zlib.decompressobj()
>>> x = d.decompress(s2)
>>> x = x+d.flush()
>>> x
b'hello python'

zlib 模組中定義了兩個常量,它們提供正在使用的 zlib 庫的版本資訊。

>>> zlib.ZLIB_VERSION
'1.2.11'
>>> zlib.ZLIB_RUNTIME_VERSION
'1.2.11'

更新於: 2020-06-25

753 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.