Python对GZip文件的支持(gzip)

2025年1月5日 | 阅读 7 分钟

引言

在本教程中,我们将学习 Python 对 gzip 文件 (gzip) 的支持。GZip 应用程序用于压缩和解压缩文件。它是 GNU 项目的一部分。Python 的 gzip 模块是 GZip 实现的接口。Gzip 文件压缩算法本身基于 Python 的 zlib 模块。Gzip 模块包含 GzipFile 类的内容和方法。它还包含 open()、compress() 和 decompress() 等简单函数。实现压缩和解压缩的最简单方法是使用下面描述的函数。

1. open() 函数

open() 函数以二进制或文本格式压缩一个 gzipped 文件,并返回该文件作为一个对象,它可以是物理文件、字符串或字节对象。默认情况下,文件以“rb”格式打开,它读取二进制文件,但此过程的操作模式可以使用下面的其他格式。

此函数还定义了压缩级别,该级别介于 0 到 9 之间。当文件以文本模式打开时,GzipFile 对象将被 Python 中的 TextIOWrapper 对象包装。

2. compress() 函数

compress() 函数压缩作为参数传递给它的数据,然后返回压缩后的字节对象。默认压缩级别为 9。

语法

compress() 函数的语法如下所示:

参数

compress() 函数的参数如下所示:

  • data:用户必须指定要压缩的数据。
  • compresslevel:默认值为 9。compresslevel 参数由 0 到 9 定义。在此,1 产生最快的压缩,9 提供最慢的压缩。如果给出 0,则不执行压缩。
  • mtime:mtime 参数定义为压缩期间流中记录的最后修改时间的可选时间戳。它仅在压缩模式下提供。默认为 None 或在当前时间使用。

3. decompress() 函数

decompress() 函数解压缩字节对象,然后返回原始数据。Python gzip.decompress() 函数可以解压缩多成员 gzip 文件,即多个 gzip 块连接在一起的文件。

语法

decompress() 函数的语法如下所示:

参数

decompress() 函数的参数如下:

  • data:用户必须指定要解压缩的数据。

Python 中为什么需要 gzip 模块?

需要数据压缩。由于每分钟都会创建许多文件,因此通过使用较少原始数据来重新编码和重新排列数据以减小其大小的过程称为数据压缩。该算法有助于找到最佳且有效的方法来减小数据大小,例如使用字典将原始字符串转换为更小的字符串。

数据压缩可将文本文件大小减小到其原始大小的 50%。较大的文件通过 ZIP、RAR、7z 或 MP3 等压缩格式在 Internet 上发送。数据压缩还可以通过减小文件大小来减少传输文件所需的时间,并占用更少的存储空间和内存。

数据压缩具有许多优点,例如减少存储、数据传输时间和通信带宽,最终节省大量成本。到目前为止,数据压缩的唯一缺点是它需要大量资源来扩展大量数据,并且压缩供应商非常重视优化速度和资源使用,以减少繁重压缩工作的影响。

程序代码

在此,我们提供 Python gzip() 模块中 compress() 函数的程序代码。代码如下:

输出

现在我们运行上述代码并从中找到压缩后的字符串。我们获得一个原始字符串,如上所示,并计算其长度。然后,我们使用 Python gzip.compress() 函数来扩展文件大小。当我们计算压缩字符串的长度时,我们会发现它会比原始字符串长,因为数据在压缩过程中被加密,这可以通过 zlib.compress() 函数看到。输出如下:

b'Hello! It is original text. Now it will be compressed.'
This is a value that represents the length of the original text 54
 Here the backend compressed string are looks somethings like this: b'x\x9c\xf3H\xcd\xc9\xc9WT\xf0,Q\xc8,V\xc8/\xcaL\xcf\xccK\xccQ(I\xad(\xd1S\xf0\xcb/W\xc8,Q(\xcf\xcc\xc9QHJUH\xce\xcf-(J-.NM\xd1\x03\x00\x01`\x13\n'
The compressed text length is represent by this value:  77
 The initial length of the string is 54 and the length after the Python gzip.compress() function is 77 because the string is encrypted in bytes.

程序代码

在此,我们提供 Python gzip() 模块中 decompress() 函数的程序代码。代码如下:

输出

现在我们运行上述代码并从中找到解压缩后的字符串。我们获得一个原始字符串,如上所示,并计算其长度。然后,我们使用 Python gzip.compress() 函数来压缩文件大小。然后,我们使用 Python gzip.decompress() 函数来解压缩压缩后的字符串。我们计算字符串长度,结果与原始长度相同。在压缩过程中,数据被加密,长度增加,如上所示。输出如下:

b'Hello! It is original text. Now it will be decompressed.'
This is a value that represents the length of the original text 56
The compressed text length is represented by this value:  79
The decompressed text length is represented by this value 56

示例

在此,我们提供了一个通过将压缩数据写入其中来创建 gzip 文件的示例。

这将在当前目录中创建文件“text.txt.gz”。此 gzip 文件包含“text.txt”文件,您可以使用解压缩工具进行检查。以编程方式读取此压缩文件。

将现有文件压缩为 gzip 文件,读取文本,并将其转换为字节数组。在 gzip 文件中,写入此字节数组对象。下面的示例假定文件“z.txt”存在于当前目录中。

在下面的代码中从 gzip 存档中获取未压缩的文件:

上面的代码将在当前目录中创建文件“z1.txt”,其中包含与“z.txt”相同的文件。除了这些基本功能之外,gzip 模块还包括 GzipFile 类,该类定义了 compress() 和 decompress() 方法。此类的构造函数将使用数据、类型和压缩级别参数,这些参数的含义与上面相同。当类型参数指定为“w”或“wb”或“wt”时。GipFile 对象将提供一种保存文件并将其写入 gzip 文件的方式。

这将创建新文件 newtext.txt.gz。您可以使用实用工具解压缩文件,以查看它包含 newtext.txt 文件,该文件包含文本“Python”和“has batteries”。要使用 GzipFile 对象解压缩 gzip 文件,请使用模式参数的“rb”值创建它,并通过 read() 方法读取未压缩的文件。

结论

因此,在本教程中,我们学习了 Python 对 gzip 文件 (gzip) 的支持。重新编码和重新排列数据以使其比原始数据小 $(original data) 的过程称为数据压缩。该算法有助于找到减小数据大小的最佳且有效的方法。Python gzip.decompress() 函数解压缩文件并返回压缩文件的字节。Python 的 gzip.decompress() 函数可以解压缩多成员 gzip 文件,即多个 gzip 部分连接在一起。Python gzip.compress() 函数用于压缩文件以减小其大小。返回值是一个字节对象。默认压缩级别为 9。