Python模組學習:zlib 資料壓縮

發表於2015-05-26

Python標準模組中,有多個模組用於資料的壓縮與解壓縮,如zipfile,gzip, bz2等等。上次介紹了zipfile模組,今天就來講講zlib模組。

zlib.compress(string[, level])

zlib.decompress(string[, wbits[, bufsize]])

zlib.compress用於壓縮流資料。引數string指定了要壓縮的資料流,引數level指定了壓縮的級別,它的取值範圍是1到9。壓縮速度與壓縮率成反比,1表示壓縮速度最快,而壓縮率最低,而9則表示壓縮速度最慢但壓縮率最高。zlib.decompress用於解壓資料。引數string指定了需要解壓的資料,wbits和bufsize分別用於設定系統緩衝區大小(window buffer )與輸出緩衝區大小(output buffer)。下面用一個例子來演示如何使用這兩個方法:

我們也可以使用Compress/Decompress物件來對資料進行壓縮/解壓縮。zlib.compressobj([level]) 與zlib.decompress(string[, wbits[, bufsize]]) 分別建立Compress/Decompress縮物件。通過物件對資料進行壓縮和解壓縮的使用方式與上面介紹的zlib.compress,zlib.decompress非常類似。但兩者對資料的壓縮還是有區別的,這主要體現在對大量資料進行操作的情況下。假如現在要壓縮一個非常大的資料檔案(上百M),如果使用zlib.compress來壓縮的話,必須先一次性將檔案裡的資料讀到記憶體裡,然後將資料進行壓縮。這樣勢必會戰用太多的記憶體。如果使用物件來進行壓縮,那麼沒有必要一次性讀取檔案的所有資料,可以先讀一部分資料到記憶體裡進行壓縮,壓縮完後寫入檔案,然後再讀其他部分的資料壓縮,如此迴圈重複,只到壓縮完整個檔案。下面一個例子來演示這之間的區別:

Python手冊對zlib模組的介紹比較詳細,更具體的應用,可以參考Python手冊。

相關文章