# 12.2. `gzip` — 对 gzip 格式的支持

源代码： Lib/gzip.py

此模块提供的简单接口帮助用户压缩和解压缩文件，功能类似于 GNU 应用程序 gzip 和 gunzip。

数据压缩由 `zlib` 模块提供。

The `gzip` module provides the `GzipFile` class which is modeled after Python’s File Object. The `GzipFile` class reads and writes gzip-format files, automatically compressing or decompressing the data so that it looks like an ordinary file object.

注意，此模块不支持部分可以被 gzip 和 gunzip 解压的格式，如利用 compress 或 pack 压缩所得的文件。

这个模块定义了以下内容：

class `gzip.``GzipFile`([filename[, mode[, compresslevel[, fileobj[, mtime]]]]])

  Constructor for the `GzipFile` class, which simulates most of the methods of a file object, with the exception of the `readinto()` and `truncate()` methods. At least one of fileobj and filename must be given a non-trivial value.

  The new class instance is based on fileobj, which can be a regular file, a `StringIO` object, or any other object which simulates a file. It defaults to `None`, in which case filename is opened to provide a file object.

  当 fileobj 为 `None` 时， filename 参数只用于 gzip 文件头中，这个文件有可能包含未压缩文件的源文件名。如果文件可以被识别，默认 fileobj 的文件名；否则默认为空字符串，在这种情况下文件头将不包含源文件名。

  The mode argument can be any of `'r'`, `'rb'`, `'a'`, `'ab'`, `'w'`, or `'wb'`, depending on whether the file will be read or written. The default is the mode of fileobj if discernible; otherwise, the default is `'rb'`. If not given, the ‘b’ flag will be added to the mode to ensure the file is opened in binary mode for cross-platform portability.

  compresslevel 参数是一个从 `0` to `9` 的整数，用于控制压缩等级；`1` 最快但压缩比例最小，`9` 最慢但压缩比例最大。 `0` 不压缩。默认为 `9`。

  The mtime argument is an optional numeric timestamp to be written to the stream when compressing. All gzip compressed streams are required to contain a timestamp. If omitted or `None`, the current time is used. This module ignores the timestamp when decompressing; however, some programs, such as gunzip, make use of it. The format of the timestamp is the same as that of the return value of `time.time()` and of the `st_mtime` attribute of the object returned by `os.stat()`.

  Calling a `GzipFile` object’s `close()` method does not close fileobj, since you might wish to append more material after the compressed data. This also allows you to pass a `StringIO` object opened for writing as fileobj, and retrieve the resulting memory buffer using the `StringIO` object’s `getvalue()` method.

  `GzipFile` supports iteration and the `with` statement.

  在 2.7 版更改: Support for the `with` statement was added.

  在 2.7 版更改: Support for zero-padded files was added.

  2.7 新版功能: The mtime argument.

`gzip.``open`(filename[, mode[, compresslevel]])

  This is a shorthand for `GzipFile(filename,` `mode,` `compresslevel)`. The filename argument is required; mode defaults to `'rb'` and compresslevel defaults to `9`.

## 12.2.1. 用法示例

读取压缩文件示例：

    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)

参见

模块 `zlib`

  支持 gzip 格式所需要的基本压缩模块。