压缩与Python(zlib)中的gzip兼容

zlib模块提供了Python的Zlib压缩库(http://www.zlib.net)的实现,该库是GNU项目的一部分。

本文讨论了zlib模块中定义的重要功能。

压缩()

该功能是该模块的主要接口decompress()。该函数通过压缩作为参数提供给它的数据来返回字节对象。该函数还有一个称为level的参数,它控制压缩程度。整数形式,取值范围是0〜9。最小值0表示无压缩,9表示最佳压缩。压缩级别越高,压缩字节对象的长度越大。

解压缩()

此功能与compress()方法相反。它检索未压缩的数据。此函数可以具有一个称为wbits的可选参数,该参数控制历史记录缓冲区的大小以及标头和结尾格式的性质。

以下语句借助compress()函数压缩字符串对象

>>> import zlib
>>> c = zlib.compress(b'hello python')
>>> c
b'x\x9c\xcbH\xcd\xc9\xc9W(\xa8,\xc9\xc8\xcf\x03\x00\x1e\xf0\x04\xd7'

而该decompress()函数检索原始Python字符串。

>>> zlib.decompress(c)
b'hello python'

该模块由具有两个对应类别的压缩和解压缩对象的定义组成。

compressobj() -此构造函数返回用于压缩数据流的压缩对象。此对象的两个重要方法是

compress() -返回压缩的字节对象。

flush() -由于压缩对象处理流,因此某些压缩数据可能会保留在缓冲区中。此方法清空缓冲区。

下面的示例通过将刷新后的数据添加到compress()method的返回值中来设置压缩对象并构造一个压缩数据对象。

>>> s1 = b'hello python'
>>> c = zlib.compressobj()
>>> s2 = c.compress(s1)
>>> s2 = s2+c.flush()
>>> s2
b'x\x9c\xcbH\xcd\xc9\xc9W(\xa8,\xc9\xc8\xcf\x03\x00\x1e\xf0\x04\xd7'

decompressobj() -这充当解压缩对象的构造函数,该解压缩对象从流中解压缩大数据。此对象提供以下方法

decompress() -此方法返回未压缩的数据

flush() -此方法清空缓冲区。

以下代码从上一个示例中创建的字节对象中检索未压缩的数据

>>> d = zlib.decompressobj()
>>> x = d.decompress(s2)
>>> x = x+d.flush()
>>> x
b'hello python'

zlib模块中定义了两个常量,它们提供了所使用的zlib库的版本信息。

>>> zlib.ZLIB_VERSION
'1.2.11'
>>> zlib.ZLIB_RUNTIME_VERSION
'1.2.11'