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 库。

更新于:2020年6月25日

13K+ 次浏览

启动你的 职业生涯

完成课程获得认证

开始学习
广告