本库主要提供了数据压缩功能和打包功能,压缩支持比如使用zlib、gzip、bzip2和lzma等算法进行压缩,打包功能支持ZIP和tar方式打包。
本模块主要提供了zlib库来对数据进行压缩和解压缩的操作。zlib是一个开源的项目,可以查看相关网站http://www.zlib.net,Python里使用的版本是大于1.1.3的版本,对前面的版本不再兼容,推荐使用1.1.4版本。
本模块提供了下面的异常处理和函数:
exception zlib.error
当压缩或解压缩时抛出异常错误。
zlib.adler32(data[, value])
对数据计算Adler-32检验码,Adler-32是与CRC32一样的功能检验码,不过它的计算量更少。如果参数value存在,就作为检验码的初始值。不过要注意本函数计算的检码只是作为检验作用,没有达到授权和签名的安全级别。返回值总是一个无符号的32位整数。
zlib.compress(data[, level])
对bytes类型的数据data进行压缩,返回bytes类型对象。参数level是压缩的级别。0是表示不压缩,1是最快压缩,9是最好压缩率的压缩。默认是6级。
zlib.compressobj(level=-1, method=DEFLATED, wbits=15, memlevel=8, strategy=Z_DEFAULT_STRATEGY[, zdict])
创建一个压缩对象返回,用来压缩那些不能一次性地把数据放到内存里的数据。参数level是压缩级别;参数method是采用压缩算法;参数wbits是压缩时使用压缩窗口的大小,值介于8与15之间,越高使用内存就越多;参数memlevel是控制内部压缩状态保存的大小,值介于1到9之间,越高占用内存越多,但速度越快;参数strategy是设置压缩算法,可以选择设置的值有Z_DEFAULT_STRATEGY, Z_FILTERED, 和 Z_HUFFMAN_ONLY;参数zdict是预先定义的压缩字典。
zlib.crc32(data[, value])
对数据data计算CRC32检验码。如果值value出现,就作初始计算码。返回无符号32位整数。
zlib.decompress(data[, wbits[, bufsize]])
解压bytes表示的数据data,返回一个bytes类型对象包含解压后的数据。参数wbits是设置解压缓冲区的大小,可选择为8到15;参数bufsize是保存解压后数据的缓冲区大小。
zlib.decompressobj(wbits=15[, zdict])
返回一个解压流数据的对象,解压不能一次性地加载数据到内存。参数与压缩的函数相同。
Compress.compress(data)
流压缩对象的压缩数据函数,返回已经被压缩的部分数据。
Compress.flush([mode])
所有未曾被压缩的数据进行压缩,返回压缩后的数据对象。参数mode可选参数为:Z_SYNC_FLUSH, Z_FULL_FLUSH, 或者Z_FINISH, 默认为Z_FINISH。
Compress.copy()
返回一个压缩对象的拷贝。
Decompress.unused_data
解压对象的将要解压的数据。
Decompress.unconsumed_tail
解压对象返回未解压的部分数据。
Decompress.eof
是否达到被解压的数据结束位置,如果是返回True。
Decompress.decompress(data[, max_length])
解压数据,返回解压的数据对象。参数data将要解压的数据对象;参数max_length是指定返回的数据长度不要大于指定值。
Decompress.flush([length])
未被解压的部分数据将会立即解压,并返回解压后的数据。调用本函数之后,不能再调用解压函数decompress()。
Decompress.copy()
返回一个解压对象的拷贝。
zlib.ZLIB_VERSION
zlib库编译的版本号。
zlib.ZLIB_RUNTIME_VERSION
实际zlib库被加载运行的版本号。
例子:
#python 3.4
import zlib
message = 'aaaabbbbccccdddd'
compressed = zlib.compress(message.encode('utf-8'))
decompressed = zlib.decompress(compressed)
print('original:', repr(message))
print('compressed:', repr(compressed))
print('decompressed:', repr(decompressed.decode('utf-8')))
结果输出如下:
original: 'aaaabbbbccccdddd'
compressed: b'x\x9cKLLLL\x02\x82d H\x01\x02\x004\x14\x06)'
decompressed: 'aaaabbbbccccdddd'
例子:
def compress(infile, dst, level=9):
infile = open(infile, 'rb')
dst = open(dst, 'wb')
compress = zlib.compressobj(level)
data = infile.read(1024)
while data:
dst.write(compress.compress(data))
data = infile.read(1024)
dst.write(compress.flush())
def decompress(infile, dst):
infile = open(infile, 'rb')
dst = open(dst, 'wb')
decompress = zlib.decompressobj()
data = infile.read(1024)
while data:
dst.write(decompress.decompress(data))
data = infile.read(1024)
dst.write(decompress.flush())
蔡军生 QQ:9073204 深圳