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 是来自的整数 09-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 是压缩级别--来自的整数 09-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 输出中的头和尾校验和。

这个 内存级别 参数控制用于内部压缩状态的内存量。有效值范围从 19 . 更高的值使用更多的内存,但速度更快,产生的输出也更小。

策略 用于调整压缩算法。可能的值是 Z_DEFAULT_STRATEGYZ_FILTEREDZ_HUFFMAN_ONLYZ_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_FLUSHZ_PARTIAL_FLUSHZ_SYNC_FLUSHZ_FULL_FLUSHZ_BLOCK (zlib 1.2.3.4),或 Z_FINISH ,默认为 Z_FINISH . 除了 Z_FINISH ,所有常量都允许进一步压缩数据的字节字符串,而 Z_FINISH 完成压缩流并阻止压缩更多数据。调用后 flush() 具有 mode 设置为 Z_FINISH , the compress() 无法再次调用方法;唯一实际的操作是删除对象。

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() , the decompress() 无法再次调用方法;唯一实际的操作是删除对象。

可选参数 长度 设置输出缓冲区的初始大小。

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手册解释了库的许多函数的语义和用法。