在线文档教程

zlib

zlib — Compression compatible with gzip

对于需要数据压缩的应用程序,此模块中的功能允许使用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模块。

这个模块中可用的异常和功能是:

exception zlib.error

压缩和解压缩错误引发异常。

zlib.adler32(data[, value])

计算的阿德勒-32校验和数据。(Adler-32校验和与CRC32几乎一样可靠,但可以更快地计算。)如果存在,则将其用作校验和的起始; 否则,使用固定的默认。这允许在多个输入的串联上计算运行校验和。该算法不具有密码强度,不应用于认证或数字签名。由于该算法被设计用作校验和算法,因此不适合用作通用哈希算法。

该函数总是返回一个整数对象。

注释

要在所有Python版本和平台上生成相同的数值,请使用adler32(data)&0xffffffff。如果仅使用压缩二进制格式的校验和,则不需要返回值,因为无论符号如何,返回值都是正确的32位二进制表示。

版本2.6中更改:无论平台如何,返回值都在-2 ** 31,2 ** 31-1的范围内。在较早的版本中,该值在某些平台上签名并在其他平台上未签名。

版本3.0中更改:返回值是无符号的,范围为0,2 ** 32-1,无论平台如何。

zlib.compress(string[, level])

压缩字符串中的数据,返回包含压缩数据的字符串。电平是从整数09控制压缩的水平; 1速度最快,压缩率9最低,速度最慢,效果最好。0没有压缩。默认值是6error发生任何错误时引发异常。

zlib.compressobj([level[, method[, wbits[, memlevel[, strategy]]]]])

返回压缩对象,用于压缩一次无法放入内存的数据流。级别是从或0到的整数,控制压缩级别; 速度最快,压缩率最低,速度最慢,效果最好。没有压缩。默认值是(Z_DEFAULT_COMPRESSION)。Z_DEFAULT_COMPRESSION表示速度和压缩之间的默认折衷(当前等同于级别6)。9-1190-1

方法是压缩算法。目前,唯一支持的值是DEFLATED

所述WBITS参数控制所述历史缓冲区(或“窗口大小”)压缩数据时所使用的大小,以及是否一个头和尾被包括在输出中。它可能需要几个范围的值。默认值是15。

  • +9到+15:窗口大小的基二对数,因此范围介于512和32768之间。较大的值会产生更好的压缩,但会增加内存使用量。结果输出将包含一个zlib特定的标题和预告片。

  • -9到-15:使用wbits的绝对值作为窗口大小对数,同时生成没有标头或尾随校验和的原始输出流。

  • +25到+31 = 16 +(9到15):将值的低4位用作窗口大小对数,同时在输出中包含基本的gzip头和尾部校验和。

memlevel控制用于内部压缩状态的内存量。有效值范围从19。使用更多内存的值越高,速度越快,输出越小。默认值是8。

策略用于调整压缩算法。可能的值是Z_DEFAULT_STRATEGYZ_FILTEREDZ_HUFFMAN_ONLY。默认是Z_DEFAULT_STRATEGY

zlib.crc32(data[, value])

计算的CRC(循环冗余校验)校验数据。如果存在,则将其用作校验和的起始; 否则,使用固定的默认。这允许在多个输入的串联上计算运行校验和。该算法不具有密码强度,不应用于认证或数字签名。由于该算法被设计用作校验和算法,因此不适合用作通用哈希算法。

该函数总是返回一个整数对象。

注释

要在所有Python版本和平台上生成相同的数值,请使用crc32(data)&0xffffffff。如果仅使用压缩二进制格式的校验和,则不需要返回值,因为无论符号如何,返回值都是正确的32位二进制表示。

版本2.6中更改:无论平台如何,返回值都在-2 ** 31,2 ** 31-1的范围内。在旧版本中,该值将在某些平台上签名,并在其他平台上签名。

版本3.0中更改:返回值是无符号的,范围为0,2 ** 32-1,无论平台如何。

zlib.decompress(string[, wbits[, bufsize]])

解压缩在数据,返回包含未压缩数据的字符。所述WBITS参数取决于格式,并且在下面进一步讨论。如果给出bufsize,则将其用作输出缓冲区的初始大小。error发生任何错误时引发异常。

WBITS参数控制历史缓冲区的大小(或“窗口大小”),什么头和尾格式的预期。它与参数类似compressobj(),但接受更多的值范围:

  • +8到+15:窗口大小的基二对数。输入必须包含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值是15,这对应于最大的窗口大小,并且需要包含zlib头部和尾部。

bufsize是用于保存解压缩数据的缓冲区的初始大小。如果需要更多的空间,缓冲区的大小将根据需要增加,因此您不必完全正确地获取该值; 调整它只会节省几个电话malloc()。默认大小是16384。

zlib.decompressobj([wbits])

返回一个解压缩对象,用于解压一次无法放入内存的数据流。

WBITS参数控制历史缓冲区的大小(或“窗口大小”),什么头和尾格式的预期。它与解压缩()所描述的含义相同。

压缩对象支持以下方法:

Compress.compress(string)

压缩字符串,返回至少包含字符串中部分数据的压缩数据的字符串。这些数据应连接到前面调用该compress()方法所产生的输出。一些输入可能会保存在内部缓冲区中以备后续处理。

Compress.flush([mode])

处理所有待处理的输入,并返回包含剩余压缩输出的字符串。模式可以从常数被选择Z_SYNC_FLUSHZ_FULL_FLUSH或者Z_FINISH,默认为Z_FINISHZ_SYNC_FLUSHZ_FULL_FLUSH允许压缩更多的数据串,同时Z_FINISH完成压缩流并防止压缩任何更多的数据。打完电话后flush()模式设置为Z_FINISH,该compress()方法不能被再次调用; 唯一现实的行动是删除对象。

Compress.copy()

返回压缩对象的副本。这可以用来有效地压缩一组共享公共初始前缀的数据。

2.5版本中的新功能。

解压缩对象支持以下方法和两个属性:

Decompress.unused_data

包含压缩数据末尾的任何字节的字符串。也就是说,""直到包含压缩数据的最后一个字节可用为止。如果整个字符串变成包含压缩数据,则这是""空字符串。

确定压缩数据字符串的结束位置的唯一方法是实际解压缩它。这意味着,当压缩数据包含在较大文件的一部分时,只能通过读取数据并将其提供并随后输入一个非空字符串到解压缩对象的decompress()方法中,直到该unused_data属性不再是空字符串才能找到它的末尾。

Decompress.unconsumed_tail

一个字符串,其中包含上次decompress()调用未消耗的任何数据,因为它超出了未压缩数据缓冲区的限制。这些数据还没有被zlib机器看到,因此您必须将它(可能连接到更多的数据)反馈给后续的decompress()方法调用以获得正确的输出。

Decompress.decompress(string[, max_length])

解压缩字符串,返回一个字符串,该字符串包含对应于字符串中至少部分数据的未压缩数据。这些数据应连接到前面调用该decompress()方法所产生的输出。一些输入数据可能会保存在内部缓冲区中以备后续处理。

如果可选参数max_length不为零,则返回值不会超过max_length。这可能意味着并非所有的压缩输入都可以被处理; 未使用的数据将被存储在属性中unconsumed_taildecompress()如果要继续解压缩,则必须将该字符串传递给后续调用。如果未提供max_length,则整个输入将被解压缩,并且unconsumed_tail是一个空字符串。

Decompress.flush([length])

处理所有待处理的输入,并返回包含剩余未压缩输出的字符串。调用之后flush(),该decompress()方法不能再被调用; 唯一现实的行动是删除对象。

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

Decompress.copy()

返回解压缩对象的副本。这可以用来在数据流的中途保存解压缩器的状态,以加速随后在随后的点对流的随机搜索。

2.5版本中的新功能。