12.2. gzip-支持 gzip 文件

源代码: Lib/gzip.py


该模块提供了一个简单的界面来压缩和解 zipfile,就像 GNU 程序 gzipgunzip 一样。

数据压缩由zlib模块提供。

gzip模块提供了GzipFile类,该类以 Python 的文件对象为模型。 GzipFile类读取和写入 gzip 格式的文件,自动压缩或解压缩数据,使其看起来像普通的文件对象。

请注意,此模块不支持可以由 gzipgunzip 程序解压缩的其他文件格式,例如 compresspack 生成的文件格式。

该模块定义以下各项:

    • class * gzip. GzipFile([文件名 [,模式 [,压缩级别 [,* fileobj * [,* mtime *]]]]]])
    • GzipFile类的构造函数,它模拟文件对象的大多数方法,但readinto()truncate()方法除外。必须为* fileobj filename *中的至少一个赋予平凡的值。

新的类实例基于* fileobj ,该文件可以是常规文件,StringIO对象,也可以是模拟文件的任何其他对象。默认为None,在这种情况下,将打开 filename *以提供文件对象。

如果* fileobj 不是None,则 filename 参数仅用于包含在 gzip 文件头中,该文件头可能包含未 zipfile 的原始文件名。如果可以识别,则默认为 fileobj *的文件名;否则,它默认为空字符串,在这种情况下,原始文件名不包含在标题中。

  • mode 参数可以是'r''rb''a''ab''w''wb'中的任何一个,具体取决于将读取还是写入文件。如果可以识别,则默认为 fileobj *模式;否则,默认值为'rb'。如果未给出,则将'b'标志添加到该模式,以确保以二进制模式打开文件以实现跨平台可移植性。

  • compresslevel *参数是从09的整数,用于控制压缩级别; 1最快并产生最小的压缩,而9最慢并产生最大的压缩。 0不压缩。默认值为9

  • mtime *参数是压缩时要写入流中的可选数字时间戳。所有 gzip 压缩流都必须包含时间戳。如果Ellipsis或None,则使用当前时间。解压缩时,该模块将忽略时间戳;但是,某些程序(例如 gunzip )会使用它。时间戳的格式与time.time()的返回值和os.stat()返回的对象的st_mtime属性的格式相同。

调用GzipFile对象的close()方法不会关闭* fileobj ,因为您可能希望在压缩数据之后附加更多材料。这还允许您传递为写入而打开的StringIO对象为 fileobj *,并使用StringIO对象的getvalue()方法检索所得的内存缓冲区。

GzipFile支持迭代和with语句。

在 2.7 版中进行了更改:添加了对with语句的支持。

在 2.7 版中进行了更改:添加了对零填充文件的支持。

2.7 版的新Function:* mtime *参数。

  • gzip. open(* filename * [,* mode * [,* compresslevel *]])
    • 这是GzipFile(filename, mode, compresslevel)的简写。 * filename *参数是必需的; * mode 默认为'rb' compresslevel *默认为9

12.2.1. 使用范例

如何读取 zipfile 的示例:

import gzip
with gzip.open('file.txt.gz', 'rb') as f:
    file_content = f.read()

如何创建压缩的 GZIP 文件的示例:

import gzip
content = "Lots of content here"
with gzip.open('file.txt.gz', 'wb') as f:
    f.write(content)

如何 GZIP 压缩现有文件的示例:

import gzip
import shutil
with open('file.txt', 'rb') as f_in, gzip.open('file.txt.gz', 'wb') as f_out:
    shutil.copyfileobj(f_in, f_out)

See also

  • Module zlib

  • 支持 gzip 文件格式所需的基本数据压缩模块。