zlib
--- Compression compatible with gzip¶
对于需要数据压缩的应用程序,此模块中的函数允许使用zlib库进行压缩和解压缩。zlib库在https://www.zlib.net上有自己的主页。Python模块和早于1.1.3的zlib库版本之间存在已知的不兼容性;1.1.3具有 security vulnerability ,因此建议使用1.1.4或更高版本。
zlib的函数有许多选项,通常需要按特定顺序使用。本文档并不试图涵盖所有排列;有关权威信息,请参阅zlib手册,网址为http://www.zlib.net/manual.html。
用于阅读和写作 .gz
文件见 gzip
模块。
此模块中可用的异常和功能包括:
- exception zlib.error¶
压缩和解压缩错误时引发异常。
- zlib.adler32(data[, value])¶
计算ADLER-32校验和 data . (ADLER-32校验和几乎和CRC32一样可靠,但计算速度更快。)结果是一个无符号的32位整数。如果 value 如果存在,则用作校验和的起始值;否则,将使用默认值1。传球 value 允许在多个输入的串联上计算正在运行的校验和。该算法在密码学上不强,不应用于身份验证或数字签名。由于该算法设计用于校验和算法,因此不适合用作一般的hash算法。
在 3.0 版更改: 始终返回无符号值。要在所有Python版本和平台上生成相同的数值,请使用
adler32(data) & 0xffffffff
.
- zlib.compress(data, /, level=-1)¶
压缩中的字节 data ,返回包含压缩数据的bytes对象。 level 是来自的整数
0
到9
或-1
控制压缩水平;1
(z_best_speed)速度最快,产生的压缩最小,9
(z_best_压缩)最慢,产生最多。0
(Z_no_compression)不是压缩。默认值为-1
(Z_默认_压缩)。z_default_compression表示速度和压缩之间的默认折衷(当前相当于级别6)。扬起error
发生错误时出现异常。在 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_压缩)最慢,产生最多。0
(Z_no_compression)不是压缩。默认值为-1
(Z_默认_压缩)。z_default_compression表示速度和压缩之间的默认折衷(当前相当于级别6)。方法 是压缩算法。目前,唯一支持的值是
DEFLATED
.这个 白细胞介素 参数控制压缩数据时使用的历史缓冲区(或“窗口大小”)的大小,以及是否在输出中包含头和尾。它可以包含多个值范围,默认为
15
(马克斯WBIT):+9到+15:窗口大小的底数2对数,因此范围在512到32768之间。值越大,压缩效果越好,但内存使用量越大。产生的输出将包括一个特定于zlib的头段和尾段。
-9至-15:使用 白细胞介素 作为窗口大小的对数,同时生成没有头或尾校验和的原始输出流。
+25到+31=16+(9到15):使用值的低4位作为窗口大小的对数,同时包括一个基本的 gzip 输出中的头和尾校验和。
这个 内存级别 参数控制用于内部压缩状态的内存量。有效值范围从
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(data[, value])¶
计算循环冗余校验和 data . 结果是一个无符号的32位整数。如果 value 如果存在,则用作校验和的起始值;否则,将使用默认值0。传球 value 允许在多个输入的串联上计算正在运行的校验和。该算法在密码学上不强,不应用于身份验证或数字签名。由于该算法设计用于校验和算法,因此不适合用作一般的hash算法。
在 3.0 版更改: 始终返回无符号值。要在所有Python版本和平台上生成相同的数值,请使用
crc32(data) & 0xffffffff
.
- zlib.decompress(data, /, wbits=MAX_WBITS, bufsize=DEF_BUF_SIZE)¶
将字节解压缩到 data ,返回包含未压缩数据的bytes对象。这个 白细胞介素 参数取决于 data ,下面将进一步讨论。如果 蟾蜍尺码 给出了它作为输出缓冲区的初始大小。扬起
error
发生错误时出现异常。这个 白细胞介素 参数控制历史缓冲区的大小(或“窗口大小”),以及预期的头和尾格式。它类似于
compressobj()
,但接受更多的值范围:+8到+15:窗口大小的底2对数。输入必须包括zlib头和尾部。
0:从zlib头自动确定窗口大小。仅在zlib 1.2.3.5之后支持。
-8至-15:使用 白细胞介素 作为窗口大小的对数。输入必须是没有头或尾的原始流。
+24到+31=16+(8到15):使用值的低4位作为窗口大小的对数。输入必须包括gzip头和尾部。
+40到+47=32+(8到15):使用值的低4位作为窗口大小的对数,并自动接受zlib或gzip格式。
当解压缩流时,窗口大小不能小于最初用于压缩流的大小;使用太小的值可能导致
error
例外。默认值 白细胞介素 值对应最大的窗口大小,需要包含zlib头段和尾段。蟾蜍尺码 是用于保存已解压缩数据的缓冲区的初始大小。如果需要更多的空间,缓冲区大小将根据需要增加,因此您不必完全正确地获取该值;对其进行优化只会节省对
malloc()
.在 3.6 版更改: 白细胞介素 和 蟾蜍尺码 不能用作关键字参数。
- zlib.decompressobj(wbits=MAX_WBITS[, zdict])¶
返回一个解压对象,用于解压无法立即装入内存的数据流。
这个 白细胞介素 参数控制历史缓冲区的大小(或“窗口大小”),以及预期的头和尾格式。它的含义与 described for decompress() _.
这个 ZDICT 参数指定预定义的压缩字典。如果提供,这必须与产生要解压缩的数据的压缩机所使用的字典相同。
注解
如果 ZDICT 是可变对象(例如
bytearray
)之间不能修改其内容。decompressobj()
第一次调用解压缩程序decompress()
方法。在 3.3 版更改: 增加了 ZDICT 参数。
压缩对象支持以下方法:
- Compress.compress(data)¶
压缩 data ,返回包含至少部分数据的压缩数据的bytes对象 data . 此数据应连接到之前调用
compress()
方法。一些输入可以保存在内部缓冲区中,以供以后处理。
- Compress.flush([mode])¶
将处理所有挂起的输入,并返回包含剩余压缩输出的bytes对象。 mode 可从常量中选择
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()
具有 mode 设置为Z_FINISH
, thecompress()
无法再次调用方法;唯一实际的操作是删除对象。
- Compress.copy()¶
返回压缩对象的副本。这可以用来有效地压缩共享一个公共初始前缀的一组数据。
在 3.8 版更改: 补充 copy.copy()
和 copy.deepcopy()
支持压缩对象。
解压对象支持以下方法和属性:
- Decompress.unused_data¶
一个字节对象,其中包含超过压缩数据结尾的任何字节。也就是说,剩下的
b""
直到包含压缩数据的最后一个字节可用为止。如果整个字节串包含压缩数据,则b""
,空字节对象。
- Decompress.unconsumed_tail¶
包含最后一个未使用的任何数据的bytes对象
decompress()
调用,因为它超出了未压缩数据缓冲区的限制。zlib机器还没有看到这个数据,所以您必须将它(可能有更多的数据连接到它)反馈给后续的decompress()
方法调用以获得正确的输出。
- Decompress.eof¶
一个布尔值,指示是否已到达压缩数据流的结尾。
这使得区分正确形成的压缩流和不完整或截断的流成为可能。
3.3 新版功能.
- Decompress.decompress(data, max_length=0)¶
减压 data ,返回一个字节对象,该对象包含与中至少一部分数据对应的未压缩数据。 string . 此数据应连接到之前调用
decompress()
方法。一些输入数据可以保存在内部缓冲区中,以供以后处理。如果可选参数 max_length 为非零,则返回值将不长于 max_length . 这可能意味着并非所有的压缩输入都可以被处理;未使用的数据将存储在属性中。
unconsumed_tail
.此bytestring必须传递给decompress()
如果要继续解压缩。如果 max_length 为零,然后对整个输入进行解压缩,并且unconsumed_tail
是空的。在 3.6 版更改: max_length 不能用作关键字参数。
- Decompress.flush([length])¶
将处理所有挂起的输入,并返回包含剩余未压缩输出的bytes对象。调用后
flush()
, thedecompress()
无法再次调用方法;唯一实际的操作是删除对象。可选参数 长度 设置输出缓冲区的初始大小。
- Decompress.copy()¶
返回解压对象的副本。这可以用来保存解压器在数据流中间的状态,以便在未来的某个点加速对数据流的随机查找。
在 3.8 版更改: 补充 copy.copy()
和 copy.deepcopy()
支持解压对象。
有关使用中的zlib库版本的信息可通过以下常量获得:
- zlib.ZLIB_VERSION¶
用于构建模块的zlib库的版本字符串。这可能与运行时实际使用的zlib库不同,后者可用作
ZLIB_RUNTIME_VERSION
.
- zlib.ZLIB_RUNTIME_VERSION¶
解释器实际加载的zlib库的版本字符串。
3.3 新版功能.
参见
- 模块
gzip
读写 gzip -格式化文件。
- http://www.zlib.net
zlib库主页。
- http://www.zlib.net/manual.html
zlib手册解释了库的许多函数的语义和用法。