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