概述
由于早期的zlib和Python之间不兼容,故推荐1.1.4以后的版本。导入zlib后可以查看版本号
>>> import zlib
>>> zlib.ZLIB_VERSION
'1.2.11'
>>> zlib.ZLIB_RUNTIME_VERSION
'1.2.11'
zlib
中封装了两对压缩和解压的函数
压缩 | 解压 |
---|---|
compress | decompress |
compressobj | decompressobj |
其中compress
和decompress
比较简单,二者声明为
zlib.compress(data, level=-1)
zlib.decompress(data, wbits=MAX_WBITS, bufsize=DEF_BUF_SIZE)
即分别对data
进行压缩和解压。
其中level
为整数,用于指定压缩等级,决定压缩后文件的大小,取值为-1到9。zlib
中内置了四个常量,用以表示四种情况。
压缩模式 | ||
---|---|---|
1 | Z_BEST_SPEED | 最快速度和最低压缩率 |
9 | Z_BEST_COMPRESSION | 最慢速度最高压缩率 |
0 | Z_NO_COMPRESSION | 不压缩 |
-1 | Z_DEFAULT_COMPRESSION | 一般相当于设压缩等级为6 |
解压函数中的wbits
控制历史缓冲区的大小(或称“窗口大小”)以及所期望的头部和尾部格式。默认为MAX_WBITS
,其取值范围和含义如下
包含头尾 | ||
---|---|---|
+8至+15 | 必须 | 窗口尺寸以二为底的对数。输入必须包含zlib头部和尾部。 |
0 | 必须含头 | 根据 zlib 头部自动确定窗口大小 |
−8至−15 | 无头尾 | 使用wbits绝对值作为窗口大小以二为底的对数 |
+24至+31 | 必须包含 | 使用后4个比特位作为窗口大小以二为底的对数。 |
+40 至+47 | 自动 | 使用后4个比特位作为窗口大小以二为底的对数 |
bufsize
是表示缓冲区初始大小,默认为DEF_MEM_LEVEL
,由于在解压过程中会自动调节,故不必完全精确。
例如
>>> x = b'abcdefghijk'*100
>>> x0 = compress(x,0)
>>> x1 = compress(x,1)
>>> x9 = compress(x,9)
>>> print(len(x),len(x0), len(x1), len(x9))
1100 1111 32 29 #无压缩时得到的数据比原始数据还大
>>> d1 = decompress(x9) #解压缩
>>> d1 == x
True
compressobj
和decompressobj
分别返回一个压缩对象和解压对象。
compressobj
返回一个 压缩对象,用来压缩内存中难以容下的数据流,声明如下
compressobj(level=-1, method=DEFLATED, wbits=MAX_WBITS, memLevel=DEF_MEM_LEVEL, strategy=Z_DEFAULT_STRATEGY[, zdict])
其中level
为压缩级别,和前文一样取值为 -1 到 9;method
表示压缩算法,现在只支持 DEFLATED;memLevel
指定内部压缩操作时所占用内存大小。参数取 1 到 9,默认DEF_MEM_LEVEL,取值越大越占内存,但速度更快。
wbits
和decompress
中相似,但取值范围更少,默认是15(MAX_WBITS)。参数范围如下:
+9 至 +15 | 窗口大小以二为底的对数。 即这些值对应着 512 至 32768 的窗口大小。 更大的值会提供更好的压缩,同时内存开销也会更大。 压缩输出会包含 zlib 特定格式的头部和尾部。 |
−9 至 −15 | 绝对值为窗口大小以二为底的对数。 压缩输出仅包含压缩数据,没有头部和尾部。 |
+25 至 +31 | 后 4 个比特位为窗口大小以二为底的对数。 压缩输出包含一个基本的 gzip 头部,并以校验和为尾部。 |
strategy 用于调节压缩算法,默认即可。
zdict
指定预定义的压缩字典。是一个字节序列,其中包含用户认为要压缩的数据中可能频繁出现的子序列。频率高的子序列应当放在字典的尾部。
除了压缩和解压缩,zlib
还提供了两个数据校验的函数,
函数 | 算法 | |
---|---|---|
zlib.adler32 | Adler-32校验 | |
zlib.crc32 | CRC(循环冗余)校验 |
二者均输入数据和校验起始值,校验起始值value
默认为1。这两个函数仅为验证数据的正确性,均无加密强度,不适合做密码。
>>> zlib.adler32(b'abcdefghijk')
434701411
>>> zlib.crc32(b'abcdefghijk')
3461812127
最后
以上就是苹果滑板为你收集整理的python压缩和解压缩模块:zlib的全部内容,希望文章能够帮你解决python压缩和解压缩模块:zlib所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复