zlib与gzip兼容的压缩(1)Python数据压缩和存档(必读进阶Python教程)(参考资料)
对于需要数据压缩的应用程序,此模块中的函数允许使用zlib库进行压缩和解压缩。zlib库在http://www.zlib.net上有自己的主页。Python模块与早于1.1.3的zlib库版本之间存在已知的不兼容性; 1.1.3有安全漏洞,因此我们建议使用1.1.4或更高版本。
zlib的功能有很多选项,通常需要按特定顺序使用。本文档并不试图涵盖所有的排列; 有关权威信息,请参阅http://www.zlib.net/manual.html上的zlib手册。
有关读取和写入.gz
文件,请参阅gzip
模块。
此模块中的可用异常和功能包括:
- 异常
zlib.
error
- 压缩和解压缩错误引发异常。
zlib.
adler32
(数据[,值] )- 计算Adler-32校验和数据。(Adler-32校验和几乎和CRC32一样可靠,但可以更快地计算。)结果是无符号的32位整数。如果存在值,则将其用作校验和的起始值; 否则,使用默认值1。传入值允许在多个输入的串联上计算运行的校验和。该算法不具有加密强度,不应用于身份验证或数字签名。由于该算法被设计用作校验和算法,因此不适合用作通用散列算法。
在3.0版中更改:始终返回无符号值。要在所有Python版本和平台上生成相同的数值,请使用。
adler32(data)& 0xffffffff
zlib.
compress
(data,level = -1 )- 压缩数据中的字节,返回包含压缩数据的字节对象。 电平是从整数
0
到9
或-1
控制压缩的水平;1
(Z_BEST_SPEED)是最快的并且产生最小的压缩,9
(Z_BEST_COMPRESSION)是最慢的并且产生最多。0
(Z_NO_COMPRESSION)没有压缩。默认值为-1
(Z_DEFAULT_COMPRESSION)。Z_DEFAULT_COMPRESSION表示速度和压缩之间的默认折衷(当前等同于级别6)。error
如果发生任何错误,则引发异常。版本3.6中的更改:级别现在可以用作关键字参数。
zlib.
compressobj
(level = -1,method = DEFLATED,wbits = MAX_WBITS,memLevel = DEF_MEM_LEVEL,strategy = Z_DEFAULT_STRATEGY [,zdict ] )- 返回一个压缩对象,用于压缩一次不适合内存的数据流。
电平是压缩级别-从整数
0
到9
或-1
。值1
(Z_BEST_SPEED)最快并产生最小压缩,而9
(Z_BEST_COMPRESSION)值最慢并产生最多。0
(Z_NO_COMPRESSION)没有压缩。默认值为-1
(Z_DEFAULT_COMPRESSION)。Z_DEFAULT_COMPRESSION表示速度和压缩之间的默认折衷(当前等同于级别6)。方法是压缩算法。目前,唯一支持的值是
DEFLATED
。所述WBITS参数控制所述历史缓冲区(或“窗口大小”)压缩数据时所使用的大小,以及是否一个头和尾被包括在输出中。它可能需要几个值范围,默认为
15
(MAX_WBITS):- +9到+15:窗口大小的基数 – 2对数,因此范围在512到32768之间。较大的值会产生更好的压缩,代价是更大的内存使用量。生成的输出将包含特定于zlib的头和尾部。
- -9到-15:使用wbits的绝对值作为窗口大小对数,同时生成没有标题或尾随校验和的原始输出流。
- +25到+31 = 16 +(9到15):使用值的低4位作为窗口大小对数,同时在输出中包含基本gzip标头和尾随校验和。
所述memLevel参数控制的存储器用于内部压缩状态的量。有效值范围
1
为9
。值越高,内存越多,但速度越快,输出越小。策略用于调整压缩算法。可能的值是
Z_DEFAULT_STRATEGY
,Z_FILTERED
,Z_HUFFMAN_ONLY
,Z_RLE
(zlib的1.2.0.1)和Z_FIXED
(zlib的1.2.2.2)。zdict是一个预定义的压缩字典。这是一个包含子序列的字节序列(如
bytes
对象),这些子序列预计会在要压缩的数据中频繁出现。那些预期最常见的子序列应该出现在字典的末尾。版本3.3中已更改:添加了zdict参数和关键字参数支持。
zlib.
crc32
(数据[,值] )-
计算的CRC(循环冗余校验)校验数据。结果是无符号的32位整数。如果存在值,则将其用作校验和的起始值; 否则,使用默认值0。传入值允许在多个输入的串联上计算运行的校验和。该算法不具有加密强度,不应用于身份验证或数字签名。由于该算法被设计用作校验和算法,因此不适合用作通用散列算法。
在3.0版中更改:始终返回无符号值。要在所有Python版本和平台上生成相同的数值,请使用。
crc32(data) &0xffffffff
zlib.
decompress
(data,wbits = MAX_WBITS,bufsize = DEF_BUF_SIZE )- 解压缩数据中的字节,返回包含未压缩数据的字节对象。所述WBITS参数取决于的格式数据,并在下面进一步讨论。如果给出bufsize,则将其用作输出缓冲区的初始大小。
error
如果发生任何错误,则引发异常。该WBITS参数控制历史缓冲区的大小(或“窗口大小”),什么头和尾格式的预期。它类似于参数for
compressobj()
,但接受更多范围的值:- +8到+15:窗口大小的基数 – 2对数。输入必须包含zlib标头和预告片。
- 0:从zlib标头自动确定窗口大小。仅自zlib 1.2.3.5起支持。
- -8到-15:使用wbits的绝对值作为窗口大小对数。输入必须是没有标题或预告片的原始流。
- +24到+31 = 16 +(8到15):使用该值的低4位作为窗口大小对数。输入必须包含gzip标头和预告片。
- +40到+47 = 32 +(8到15):使用该值的低4位作为窗口大小对数,并自动接受zlib或gzip格式。
解压缩流时,窗口大小不得小于最初用于压缩流的大小; 使用太小的值可能会导致
error
异常。默认的wbits值对应于最大窗口大小,并且需要包含zlib头和尾部。bufsize是用于保存解压缩数据的缓冲区的初始大小。如果需要更多空间,缓冲区大小将根据需要增加,因此您不必完全正确地获取此值; 调整它只会节省几个电话
malloc()
。在版本3.6中更改:wbits和bufsize可用作关键字参数。
zlib.
decompressobj
(wbits = MAX_WBITS [,zdict ] )- 返回一个解压缩对象,用于解压缩一次不适合内存的数据流。
该WBITS参数控制历史缓冲区的大小(或“窗口大小”),什么头和尾格式的预期。它与decompress()中描述的含义相同。
所述zdict参数指定的预定义压缩词典。如果提供,则必须与生成要解压缩的数据的压缩器使用的字典相同。
注意
如果zdict是一个可变对象(例如a
bytearray
),则不得在调用decompressobj()
和第一次调用解压缩器decompress()
方法之间修改其内容。版本3.3中已更改:添加了zdict参数。
压缩对象支持以下方法:
Compress.
compress
(数据)- 压缩数据,返回一个包含压缩的数据在数据的至少一部分的字节对象数据。此数据应连接到前面对
compress()
方法的任何调用产生的输出。某些输入可以保存在内部缓冲区中以供以后处理。
Compress.
flush
([ 模式] )- 处理所有挂起的输入,并返回包含剩余压缩输出的字节对象。 模式可以从常数被选择
Z_NO_FLUSH
,Z_PARTIAL_FLUSH
,Z_SYNC_FLUSH
,Z_FULL_FLUSH
,Z_BLOCK
(ZLIB 1.2.3.4),或Z_FINISH
,默认为Z_FINISH
。除此之外Z_FINISH
,所有常量都允许压缩更多的字节数据串,同时Z_FINISH
完成压缩流并防止压缩更多数据。打完电话后flush()
与模式设置为Z_FINISH
,该compress()
方法不能被再次调用; 唯一现实的行动是删除对象。
Compress.
copy
()- 返回压缩对象的副本。这可以用于有效地压缩共享公共初始前缀的一组数据。
解压缩对象支持以下方法和属性:
Decompress.
unused_data
- 一个bytes对象,包含压缩数据末尾之后的任何字节。也就是说,这一直存在,
b""
直到包含压缩数据的最后一个字节可用。如果整个bytestring结果包含压缩数据,那么这是b""
一个空字节对象。
Decompress.
unconsumed_tail
- 一个bytes对象,包含上次
decompress()
调用未使用的任何数据, 因为它超出了未压缩数据缓冲区的限制。zlib机器尚未看到此数据,因此您必须将其(可能与其连接的其他数据)反馈给后续decompress()
方法调用以获得正确的输出。
Decompress.
eof
- 一个布尔值,指示是否已到达压缩数据流的末尾。
这使得可以区分正确形成的压缩流和不完整或截断的压缩流。
版本3.3中的新功能。
Decompress.
decompress
(data,max_length = 0 )- 解压缩数据,返回包含与字符串中至少部分数据相对应的未压缩数据的字节对象。此数据应连接到前面对
decompress()
方法的任何调用产生的输出 。一些输入数据可以保留在内部缓冲区中以供稍后处理。如果可选参数max_length不为零,则返回值不会超过max_length。这可能意味着并非所有压缩输入都可以处理; 和未使用的数据将存储在属性中
unconsumed_tail
。必须将此字节字符串传递给后续调用,decompress()
以便继续进行 解压缩。如果max_length为零,则整个输入被解压缩,并且unconsumed_tail
为空。在版本3.6中更改:max_length可用作关键字参数。
Decompress.
flush
([ 长度] )- 处理所有挂起的输入,并返回包含剩余未压缩输出的字节对象。调用后
flush()
,decompress()
无法再次调用该 方法; 唯一现实的行动是删除对象。可选参数length设置输出缓冲区的初始大小。
Decompress.
copy
()- 返回解压缩对象的副本。这可以用于在数据流的中途保存解压缩器的状态,以便在将来的点加速随机搜索到流中。
有关正在使用的zlib库版本的信息可通过以下常量获得:
zlib.
ZLIB_VERSION
- 用于构建模块的zlib库的版本字符串。这可能与运行时实际使用的zlib库不同,后者可用
ZLIB_RUNTIME_VERSION
。
zlib.
ZLIB_RUNTIME_VERSION
- zlib库的版本字符串实际上由解释器加载。
版本3.3中的新功能。
也可以看看
- 模
gzip
- 读取和编写gzip -format文件。
- http://www.zlib.net
- zlib库主页。
- http://www.zlib.net/manual.html
- zlib手册解释了库的许多功能的语义和用法。