#coding: utf-8
import zlib
#壓縮
def compressor(infile, dst, level=6):
infile = open(infile, ''rb'')
dst = open(dst, ''wb'')
compress = zlib.compressobj(level)
data = infile.read(128)
while data:
dst.write(compress.compress(data))
data = infile.read(128)
dst.write(compress.flush())
infile.close()
dst.close()
#解壓
def decompressor(infile, dst):
infile = open(infile, ''rb'')
dst = open(dst, ''wb'')
decompress = zlib.decompressobj()
data = infile.read(128)
while data:
dst.write(decompress.decompress(data))
data = infile.read(128)
dst.write(decompress.flush())
infile.close()
dst.close()
if __name__ == ''__main__'':
compressor("test.txt", "test_zlib")
decompressor("test_zlib", "test_zlib.txt")
zlib的一些函數:
zlib.adler32(s [,crc]) 返回字符串的Adler32校驗碼。參數''crc''用于增量校驗。Adler32校驗比普通CRC32校驗快。Adler32校驗只能用于檢測數據是否損壞,而不用于加密。
zlib.compress(s [,level]) 壓縮字符串。參數''level''指定壓縮的等級,范圍從1至9,默認值為6。
zlib.crc32(s [,crc]) 返回字符串的CRC32校驗碼。參數''crc''用于增量校驗。CRC32校驗只能用于檢測數據是否損壞,而不用于加密。
zlib.decompress(s [,winsize [,buffsize]]) 解壓字符串。參數''winsize''指定窗口緩沖區的大小,默認是15。參數''buffsize''指定解壓緩沖區的大小,默認是16384。
zlib.compressobj([level]) 創建壓縮對象。該壓縮對象可以增量逐步壓縮字符串塊,同時保留先前壓縮的內部狀態參數。參數''level''指定壓縮的等級,范圍從1至9,默認值為6。
zlib.decompressobj([winsize]) 創建解壓對象。該解壓對象可以增量逐步解壓字符串塊,同時保留先前解壓的內部狀態參數。參數''winsize''指定窗口緩沖區的大小,默認是15。
zlib的一些方法和屬性:
zlib.compressobj.compress(s) 添加需要壓縮的數據。如果數據足夠則返回相應的壓縮數據,否則返回空字符串。
zlib.compressobj.flush([mode]) 生成完整的壓縮數據。參數''mode''默認為Z_FINISH,即該壓縮對象不再使用,這時應該''del''它。如果指定Z_SYNC_FLUSH或Z_FULL_FLUSH,壓縮對象仍然可以使用,但原先的壓縮數據將不再保留。
zlib.decompressobj.unused_data 就像上面那個例子顯示的那樣,
zlib.decompressobj.unused_data
是一個屬性而不是方法,其中包含任何還未能處理的解壓數據。zlib.decompressobj.decompress(s) 添加解壓縮數據。返回解壓出的數據,未處理的保留在
zlib.decompressobj.unused_data
。zlib.decompressobj.flush() 返回全部解壓數據。如果解壓對象不再使用,您應該
del
它。