我们使用 GZip 应用程序对文件进行压缩和解压缩。它是 GNU 工程的一部分。Python 的 gzip 模块是 GZip 应用程序的接口。gzip 数据压缩算法本身就是基于 zlib 模块的。
gzip 模块包含 GzipFile 类的定义及其方法。它还包含便捷函数 open()、compress() 和 decompress()。
让我们讨论一下这些功能 -
open() 函数
此函数以二进制或文本模式打开 gzip 压缩文件,并返回类似 object 的文件,该对象可以是物理文件、字符串或字节对象。默认情况下,文件以 'rb' 模式打开,即读取二进制数据,但是,此函数的 mode 参数可以采用其他模式,如下所示 -
- 二进制模式 − 'r', 'rb', 'a', 'ab', 'w', 'wb', 'x', 'xb'。
- 文本模式 − 'rt'、'at'、'wt' 或 'xt'。
此函数还定义可接受值介于 0 到 9 之间的压缩级别。当文件以文本模式打开时,GzipFile 对象将包装在 TextIOWrapper 对象中。
compress() 函数
此函数对作为参数提供给它的数据应用压缩,并返回压缩的字节对象。默认情况下,压缩级别为 9。
decompress() 函数
此函数解压缩 byte 对象并返回未压缩的数据。
以下示例通过在 gzip 文件中写入压缩数据来创建 gzip 文件。
这将在当前目录中创建 “test.txt.gz” 文件。此 gzip 存档包含“test.txt”,您可以使用任何解压缩实用程序进行验证。
以编程方式读取此压缩文件。
输出
要将现有文件压缩为 gzip 存档,请读取其中的文本并将其转换为 bytearray。然后,此 bytearray 对象将写入 gzip 文件。在下面的示例中,假定 'zen.txt' 文件存在于当前目录中。
从 gzip 存档中检索未压缩的文件。
上面的代码将在当前目录中创建 'zen1.txt',其中包含与 'zen.txt' 相同的数据。
除了这些方便的功能外,gzip 模块还具有 GzipFile 类,它定义了 compress() 和 decompress() 方法。此类的构造函数采用 file、mode 和 compressionlevel 参数,其含义与上述完全相同。
当 mode 参数为 'w' 或 'wb' 或 'wt' 时,GipFile 对象将提供 write() 方法来压缩给定的数据并写入 gzip 文件。
这将创建一个 testnew.txt.gz 文件。您可以使用任何实用程序将其解压缩,以查看它是否包含带有 'Python − Batteries included' 文本的testnew.txt。
要使用 GzipFile 对象解压缩 gzip 文件,请使用 'rb' 值到 mode 参数创建它,并通过 read() 方法读取未压缩的数据。