gzip 模块



我们使用 GZip 应用程序来压缩和解压缩文件。它是 GNU 项目的一部分。Python 的 gzip 模块是 GZip 应用程序的接口。gzip 数据压缩算法本身基于 zlib 模块。

gzip 模块包含 GzipFile 类的定义及其方法。它还包含便利函数 open()、compress() 和 decompress()。

让我们讨论一下这些函数 -

open() 函数

此函数以二进制或文本模式打开一个 gzip 压缩文件,并返回一个类似文件的对象,该对象可以是物理文件、字符串或字节对象。默认情况下,文件以 'rb' 模式打开,即读取二进制数据,但是,此函数的 mode 参数可以采用下面列出的其他模式 -

  • 二进制模式 - 'r'、'rb'、'a'、'ab'、'w'、'wb'、'x'、'xb'。

  • 文本模式 - 'rt'、'at'、'wt' 或 '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:
   print (f.read())

输出

b'Python - Batteries included'

要将现有文件压缩到 gzip 存档中,请读取其中的文本并将其转换为字节数组。然后将此字节数组对象写入 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 文件。您可以使用任何实用程序解压缩它,以查看它是否包含 testnew.txt,其中包含“Python - Batteries included”文本。

要使用 GzipFile 对象解压缩 gzip 文件,请使用 'rb' 值创建它作为 mode 参数,并通过 read() 方法读取未压缩的数据。

f=gzip.GzipFile("testnew.txt.gz","rb")
data=f.read()
print (data)
python_data_compression.htm
广告

© . All rights reserved.