blob: 861a59cd4503ddc76384e115818e90349b39a6ca [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001:mod:`gzip` --- Support for :program:`gzip` files
2=================================================
3
4.. module:: gzip
5 :synopsis: Interfaces for gzip compression and decompression using file objects.
6
Raymond Hettinger469271d2011-01-27 20:38:46 +00007**Source code:** :source:`Lib/gzip.py`
8
9--------------
10
Christian Heimesbbe741d2008-03-28 10:53:29 +000011This module provides a simple interface to compress and decompress files just
12like the GNU programs :program:`gzip` and :program:`gunzip` would.
Georg Brandl116aa622007-08-15 14:28:22 +000013
Georg Brandl1f01deb2009-01-03 22:47:39 +000014The data compression is provided by the :mod:`zlib` module.
Christian Heimesbbe741d2008-03-28 10:53:29 +000015
Nadeem Vawda7e126202012-05-06 15:04:01 +020016The :mod:`gzip` module provides the :class:`GzipFile` class, as well as the
17:func:`gzip.open`, :func:`compress` and :func:`decompress` convenience
18functions. The :class:`GzipFile` class reads and writes :program:`gzip`\ -format
19files, automatically compressing or decompressing the data so that it looks like
20an ordinary :term:`file object`.
Christian Heimesbbe741d2008-03-28 10:53:29 +000021
22Note that additional file formats which can be decompressed by the
23:program:`gzip` and :program:`gunzip` programs, such as those produced by
24:program:`compress` and :program:`pack`, are not supported by this module.
Georg Brandl116aa622007-08-15 14:28:22 +000025
Georg Brandl116aa622007-08-15 14:28:22 +000026The module defines the following items:
27
28
Nadeem Vawda7e126202012-05-06 15:04:01 +020029.. function:: open(filename, mode='rb', compresslevel=9, encoding=None, errors=None, newline=None)
30
31 Open *filename* as a gzip-compressed file in binary or text mode.
32
33 Returns a :term:`file object`.
34
35 The *mode* argument can be any of ``'r'``, ``'rb'``, ``'a'``, ``'ab'``,
36 ``'w'``, or ``'wb'`` for binary mode, or ``'rt'``, ``'at'``, or ``'wt'`` for
37 text mode. The default is ``'rb'``.
38
39 The *compresslevel* argument is an integer from 1 to 9, as for the
40 :class:`GzipFile` constructor.
41
42 For binary mode, this function is equivalent to the :class:`GzipFile`
43 constructor: ``GzipFile(filename, mode, compresslevel)``. In this case, the
44 *encoding*, *errors* and *newline* arguments must not be provided.
45
46 For text mode, a :class:`GzipFile` object is created, and wrapped in an
47 :class:`io.TextIOWrapper` instance with the specified encoding, error
48 handling behavior, and line ending(s).
49
50 .. versionchanged:: 3.3
51 Support for text mode was added, along with the *encoding*, *errors* and
52 *newline* arguments.
53
54
Georg Brandl036490d2009-05-17 13:00:36 +000055.. class:: GzipFile(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)
Georg Brandl116aa622007-08-15 14:28:22 +000056
Antoine Pitrouc3ed2e72010-09-29 10:49:46 +000057 Constructor for the :class:`GzipFile` class, which simulates most of the
58 methods of a :term:`file object`, with the exception of the :meth:`truncate`
59 method. At least one of *fileobj* and *filename* must be given a non-trivial
60 value.
Georg Brandl116aa622007-08-15 14:28:22 +000061
62 The new class instance is based on *fileobj*, which can be a regular file, a
63 :class:`StringIO` object, or any other object which simulates a file. It
64 defaults to ``None``, in which case *filename* is opened to provide a file
65 object.
66
67 When *fileobj* is not ``None``, the *filename* argument is only used to be
68 included in the :program:`gzip` file header, which may includes the original
69 filename of the uncompressed file. It defaults to the filename of *fileobj*, if
70 discernible; otherwise, it defaults to the empty string, and in this case the
71 original filename is not included in the header.
72
73 The *mode* argument can be any of ``'r'``, ``'rb'``, ``'a'``, ``'ab'``, ``'w'``,
74 or ``'wb'``, depending on whether the file will be read or written. The default
Nadeem Vawda30d94b72012-02-11 23:45:10 +020075 is the mode of *fileobj* if discernible; otherwise, the default is ``'rb'``.
76
Nadeem Vawda7e126202012-05-06 15:04:01 +020077 Note that the file is always opened in binary mode. To open a compressed file
78 in text mode, use :func:`gzip.open` (or wrap your :class:`GzipFile` with an
79 :class:`io.TextIOWrapper`).
Georg Brandl116aa622007-08-15 14:28:22 +000080
81 The *compresslevel* argument is an integer from ``1`` to ``9`` controlling the
82 level of compression; ``1`` is fastest and produces the least compression, and
83 ``9`` is slowest and produces the most compression. The default is ``9``.
84
Antoine Pitrou42db3ef2009-01-04 21:37:59 +000085 The *mtime* argument is an optional numeric timestamp to be written to
Benjamin Petersone0124bd2009-03-09 21:04:33 +000086 the stream when compressing. All :program:`gzip` compressed streams are
Antoine Pitrou42db3ef2009-01-04 21:37:59 +000087 required to contain a timestamp. If omitted or ``None``, the current
88 time is used. This module ignores the timestamp when decompressing;
89 however, some programs, such as :program:`gunzip`\ , make use of it.
90 The format of the timestamp is the same as that of the return value of
Senthil Kumarana6bac952011-07-04 11:28:30 -070091 ``time.time()`` and of the ``st_mtime`` attribute of the object returned
Antoine Pitrou42db3ef2009-01-04 21:37:59 +000092 by ``os.stat()``.
93
Georg Brandl116aa622007-08-15 14:28:22 +000094 Calling a :class:`GzipFile` object's :meth:`close` method does not close
95 *fileobj*, since you might wish to append more material after the compressed
Antoine Pitroue5768cf2010-09-23 16:45:17 +000096 data. This also allows you to pass a :class:`io.BytesIO` object opened for
Georg Brandl116aa622007-08-15 14:28:22 +000097 writing as *fileobj*, and retrieve the resulting memory buffer using the
Antoine Pitroue5768cf2010-09-23 16:45:17 +000098 :class:`io.BytesIO` object's :meth:`~io.BytesIO.getvalue` method.
Georg Brandl116aa622007-08-15 14:28:22 +000099
Antoine Pitrouc3ed2e72010-09-29 10:49:46 +0000100 :class:`GzipFile` supports the :class:`io.BufferedIOBase` interface,
101 including iteration and the :keyword:`with` statement. Only the
102 :meth:`truncate` method isn't implemented.
Benjamin Petersone0124bd2009-03-09 21:04:33 +0000103
Antoine Pitrou7b998e92010-10-04 21:55:14 +0000104 :class:`GzipFile` also provides the following method:
105
106 .. method:: peek([n])
107
108 Read *n* uncompressed bytes without advancing the file position.
109 At most one single read on the compressed stream is done to satisfy
110 the call. The number of bytes returned may be more or less than
111 requested.
112
113 .. versionadded:: 3.2
114
Benjamin Peterson10745a92009-03-09 21:08:47 +0000115 .. versionchanged:: 3.1
Benjamin Petersone0124bd2009-03-09 21:04:33 +0000116 Support for the :keyword:`with` statement was added.
117
Antoine Pitrou8e33fd72010-01-13 14:37:26 +0000118 .. versionchanged:: 3.2
119 Support for zero-padded files was added.
120
Antoine Pitrou7b969842010-09-23 16:22:51 +0000121 .. versionchanged:: 3.2
122 Support for unseekable files was added.
123
Antoine Pitrou6b4be362011-04-04 21:09:05 +0200124 .. versionchanged:: 3.3
125 The :meth:`io.BufferedIOBase.read1` method is now implemented.
126
Georg Brandl116aa622007-08-15 14:28:22 +0000127
Antoine Pitrou79c5ef12010-08-17 21:10:05 +0000128.. function:: compress(data, compresslevel=9)
129
130 Compress the *data*, returning a :class:`bytes` object containing
131 the compressed data. *compresslevel* has the same meaning as in
132 the :class:`GzipFile` constructor above.
133
Antoine Pitroucdfe1c52010-08-17 21:15:00 +0000134 .. versionadded:: 3.2
135
Antoine Pitrou79c5ef12010-08-17 21:10:05 +0000136.. function:: decompress(data)
137
138 Decompress the *data*, returning a :class:`bytes` object containing the
139 uncompressed data.
140
Antoine Pitroucdfe1c52010-08-17 21:15:00 +0000141 .. versionadded:: 3.2
142
Georg Brandl116aa622007-08-15 14:28:22 +0000143
Christian Heimesbbe741d2008-03-28 10:53:29 +0000144.. _gzip-usage-examples:
145
146Examples of usage
147-----------------
148
149Example of how to read a compressed file::
150
151 import gzip
Antoine Pitroubf1a0182010-08-17 21:11:49 +0000152 with gzip.open('/home/joe/file.txt.gz', 'rb') as f:
153 file_content = f.read()
Christian Heimesbbe741d2008-03-28 10:53:29 +0000154
155Example of how to create a compressed GZIP file::
156
157 import gzip
Antoine Pitroubf1a0182010-08-17 21:11:49 +0000158 content = b"Lots of content here"
159 with gzip.open('/home/joe/file.txt.gz', 'wb') as f:
160 f.write(content)
Christian Heimesbbe741d2008-03-28 10:53:29 +0000161
162Example of how to GZIP compress an existing file::
163
164 import gzip
Antoine Pitroubf1a0182010-08-17 21:11:49 +0000165 with open('/home/joe/file.txt', 'rb') as f_in:
Éric Araujof5be0902010-08-17 21:24:05 +0000166 with gzip.open('/home/joe/file.txt.gz', 'wb') as f_out:
Antoine Pitroubf1a0182010-08-17 21:11:49 +0000167 f_out.writelines(f_in)
Christian Heimesbbe741d2008-03-28 10:53:29 +0000168
Antoine Pitrou79c5ef12010-08-17 21:10:05 +0000169Example of how to GZIP compress a binary string::
170
171 import gzip
172 s_in = b"Lots of content here"
173 s_out = gzip.compress(s_in)
Christian Heimesbbe741d2008-03-28 10:53:29 +0000174
Georg Brandl116aa622007-08-15 14:28:22 +0000175.. seealso::
176
177 Module :mod:`zlib`
178 The basic data compression module needed to support the :program:`gzip` file
179 format.
180