python中使用zlib对文件的压缩和解压
#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
它。