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