zlib 模块,提供了压缩和解压缩的函数,都是对字符串进行操作的,可以理解为是各种不同类型的数据经过处理成为字符串或是二进制字符串,再进行压缩解压缩。是和 gzip 相兼容的压缩模块

模块方法:

zlib.adler32(data[, value]):计算数据 data 的 Adler-32 值,这是一个用于验证数据是否完整的算法,和 CRC32 算法相比速度更快
zlib.crc32(data[, value]):计算数据 data 的 CRC32 值,也是一个用于验证数据是否完整的算法
zlib.compress(string[, level]):压缩 string 里的数据,level 指定压缩方式,1-9 递增速度变慢,压缩变多,0 代表不压缩,默认 6
zlib.decompress(string[, wbits[, bufsize]]):解压缩 string 里的数据,wbits 指定系统读入缓冲区的大小,bufsize 指定输出缓冲区的大小

模块的类:

1、Compression 对象,可以一点点读取数据,不用一次性读入占用大量内存

1.1 构建对象

zlib.compressobj([level[, method[, wbits[, memlevel[, strategy]]]]]):level、wbits 同上,method 指定压缩算法,目前就只有默认的 DEFLATED,memlevel 控制内部压缩时的内存使用量,1-9 越高用越多内存,但速度更快压缩更多,默认 8,strategy 用于调整压缩算法 默认 Z_DEFAULT_STRATEGY, 还有 Z_FILTERED 和 Z_HUFFMAN_ONLY,不知道和 method 有什么区别,一般都是默认

1.2 对象方法

compress(string):压缩 string,返回压缩后的字符串,结果要和之前调用的 compress 的结果连接起来,最后再调用 flush,完整压缩
flush([mode]):把剩余的输入在缓冲区内的数据全部压缩,返回压缩后的字符串,mode 可以为 Z_SYNC_FLUSH, Z_FULL_FLUSH,或 Z_FINISH。默认 Z_FINISH,不能再对这个对象调用 compress,只能删除对象,另外两个允许后续的操作
copy():拷贝一个 Compression 对象,对于有共同部分的文件压缩时有用

2、Decompression 对象,也是可以一点点读取数据,不用消耗大量内存

2.1 构建对象

zlib.decompressobj([wbits]):wbits 同上

2.2 对象方法

decompress(string[, max_length]):解压缩 string,max_length 指定一次解压结果的最大长度,剩余未压缩的会保存在属性 unconsumed_tail 中,未指定则一次解压所有读入的数据
flush([length]):把剩余的输入在缓冲区内的数据全部解压缩,返回解压缩后的字符串,length 指定输出缓冲区的初始大小
copy():拷贝一个 Decompression 对象,可以保存解压中途的一个状态

2.3 对象属性

unused_data:保存了还没被解压的数据,只有完全解压完了,它才会变成空字符串
unconsumed_tail:保存了上次 decompress 由于超过指定的 max_length 而没有解压完的数据,所以一定要再调用 decompress 把它完全解压完