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


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

本文讨论了 zlib 模块中定义的重要函数。

compress()

此函数与 decompress() 函数一起是此模块的主要接口。此函数通过压缩作为参数给定的数据来返回字节对象。该函数还有另一个名为 level 的参数,它控制压缩程度。它是一个介于 0 到 9 之间的整数。最低值 0 表示不压缩,9 表示最佳压缩。压缩级别越高,压缩后的字节对象长度越长。

decompress()

此函数执行与 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() 方法的返回值来构造压缩数据对象。

>>> 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'

更新于: 2020-06-25

753 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告