You are here:  Home » Python » 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.compressdatalevel = -1 
压缩数据中的字节,返回包含压缩数据的字节对象。 电平是从整数09-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.compressobjlevel = -1method = DEFLATEDwbits = MAX_WBITSmemLevel = DEF_MEM_LEVELstrategy = Z_DEFAULT_STRATEGY [zdict 
返回一个压缩对象,用于压缩一次不适合内存的数据流。

电平是压缩级别-从整数09-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参数控制的存储器用于内部压缩状态的量。有效值范围19。值越高,内存越多,但速度越快,输出越小。

策略用于调整压缩算法。可能的值是 Z_DEFAULT_STRATEGYZ_FILTEREDZ_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.decompressdatawbits = MAX_WBITSbufsize = 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中更改:wbitsbufsize可用作关键字参数。

zlib.decompressobjwbits = MAX_WBITS [zdict 
返回一个解压缩对象,用于解压缩一次不适合内存的数据流。

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

所述zdict参数指定的预定义压缩词典。如果提供,则必须与生成要解压缩的数据的压缩器使用的字典相同。

注意

如果zdict是一个可变对象(例如a bytearray),则不得在调用decompressobj()和第一次调用解压缩器decompress()方法之间修改其内容。

版本3.3中已更改:添加了zdict参数。

压缩对象支持以下方法:

Compress.compress数据
压缩数据,返回一个包含压缩的数据在数据的至少一部分的字节对象数据。此数据应连接到前面对compress()方法的任何调用产生的输出。某些输入可以保存在内部缓冲区中以供以后处理。
Compress.flush模式
处理所有挂起的输入,并返回包含剩余压缩输出的字节对象。 模式可以从常数被选择 Z_NO_FLUSHZ_PARTIAL_FLUSHZ_SYNC_FLUSH, Z_FULL_FLUSHZ_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.decompressdatamax_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手册解释了库的许多功能的语义和用法。