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