Python gzip模块

Python 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()方法。这个类的构造函数接受文件、模式和压缩级别参数,含义与上述相同。

当模式参数给定为’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’值创建它,并通过read()方法读取未压缩的数据。

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程