blob: 2cbd2d5f5ba7eccb0f855e16521481f11baf889f [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
Nadeem Vawda68721012012-06-04 23:21:38 +020017:func:`.open`, :func:`compress` and :func:`decompress` convenience functions.
18The :class:`GzipFile` class reads and writes :program:`gzip`\ -format files,
19automatically compressing or decompressing the data so that it looks like an
20ordinary :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
Nadeem Vawda68721012012-06-04 23:21:38 +020031 Open a gzip-compressed file in binary or text mode, returning a :term:`file
32 object`.
Nadeem Vawda7e126202012-05-06 15:04:01 +020033
Nadeem Vawda68721012012-06-04 23:21:38 +020034 The *filename* argument can be an actual filename (a :class:`str` or
35 :class:`bytes` object), or an existing file object to read from or write to.
Nadeem Vawda7e126202012-05-06 15:04:01 +020036
37 The *mode* argument can be any of ``'r'``, ``'rb'``, ``'a'``, ``'ab'``,
38 ``'w'``, or ``'wb'`` for binary mode, or ``'rt'``, ``'at'``, or ``'wt'`` for
39 text mode. The default is ``'rb'``.
40
Nadeem Vawda6ff262e2012-11-11 14:14:47 +010041 The *compresslevel* argument is an integer from 0 to 9, as for the
Nadeem Vawda7e126202012-05-06 15:04:01 +020042 :class:`GzipFile` constructor.
43
44 For binary mode, this function is equivalent to the :class:`GzipFile`
45 constructor: ``GzipFile(filename, mode, compresslevel)``. In this case, the
46 *encoding*, *errors* and *newline* arguments must not be provided.
47
48 For text mode, a :class:`GzipFile` object is created, and wrapped in an
49 :class:`io.TextIOWrapper` instance with the specified encoding, error
50 handling behavior, and line ending(s).
51
52 .. versionchanged:: 3.3
Nadeem Vawda68721012012-06-04 23:21:38 +020053 Added support for *filename* being a file object, support for text mode,
54 and the *encoding*, *errors* and *newline* arguments.
Nadeem Vawda7e126202012-05-06 15:04:01 +020055
56
Georg Brandl036490d2009-05-17 13:00:36 +000057.. class:: GzipFile(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)
Georg Brandl116aa622007-08-15 14:28:22 +000058
Antoine Pitrouc3ed2e72010-09-29 10:49:46 +000059 Constructor for the :class:`GzipFile` class, which simulates most of the
60 methods of a :term:`file object`, with the exception of the :meth:`truncate`
61 method. At least one of *fileobj* and *filename* must be given a non-trivial
62 value.
Georg Brandl116aa622007-08-15 14:28:22 +000063
64 The new class instance is based on *fileobj*, which can be a regular file, a
65 :class:`StringIO` object, or any other object which simulates a file. It
66 defaults to ``None``, in which case *filename* is opened to provide a file
67 object.
68
69 When *fileobj* is not ``None``, the *filename* argument is only used to be
70 included in the :program:`gzip` file header, which may includes the original
71 filename of the uncompressed file. It defaults to the filename of *fileobj*, if
72 discernible; otherwise, it defaults to the empty string, and in this case the
73 original filename is not included in the header.
74
75 The *mode* argument can be any of ``'r'``, ``'rb'``, ``'a'``, ``'ab'``, ``'w'``,
76 or ``'wb'``, depending on whether the file will be read or written. The default
Nadeem Vawda30d94b72012-02-11 23:45:10 +020077 is the mode of *fileobj* if discernible; otherwise, the default is ``'rb'``.
78
Nadeem Vawda7e126202012-05-06 15:04:01 +020079 Note that the file is always opened in binary mode. To open a compressed file
Nadeem Vawda68721012012-06-04 23:21:38 +020080 in text mode, use :func:`.open` (or wrap your :class:`GzipFile` with an
Nadeem Vawda7e126202012-05-06 15:04:01 +020081 :class:`io.TextIOWrapper`).
Georg Brandl116aa622007-08-15 14:28:22 +000082
Nadeem Vawda19e568d2012-11-11 14:04:14 +010083 The *compresslevel* argument is an integer from ``0`` to ``9`` controlling
84 the level of compression; ``1`` is fastest and produces the least
85 compression, and ``9`` is slowest and produces the most compression. ``0``
86 is no compression. The default is ``9``.
Georg Brandl116aa622007-08-15 14:28:22 +000087
Antoine Pitrou42db3ef2009-01-04 21:37:59 +000088 The *mtime* argument is an optional numeric timestamp to be written to
Benjamin Petersone0124bd2009-03-09 21:04:33 +000089 the stream when compressing. All :program:`gzip` compressed streams are
Antoine Pitrou42db3ef2009-01-04 21:37:59 +000090 required to contain a timestamp. If omitted or ``None``, the current
91 time is used. This module ignores the timestamp when decompressing;
92 however, some programs, such as :program:`gunzip`\ , make use of it.
93 The format of the timestamp is the same as that of the return value of
Senthil Kumarana6bac952011-07-04 11:28:30 -070094 ``time.time()`` and of the ``st_mtime`` attribute of the object returned
Antoine Pitrou42db3ef2009-01-04 21:37:59 +000095 by ``os.stat()``.
96
Georg Brandl116aa622007-08-15 14:28:22 +000097 Calling a :class:`GzipFile` object's :meth:`close` method does not close
98 *fileobj*, since you might wish to append more material after the compressed
Antoine Pitroue5768cf2010-09-23 16:45:17 +000099 data. This also allows you to pass a :class:`io.BytesIO` object opened for
Georg Brandl116aa622007-08-15 14:28:22 +0000100 writing as *fileobj*, and retrieve the resulting memory buffer using the
Antoine Pitroue5768cf2010-09-23 16:45:17 +0000101 :class:`io.BytesIO` object's :meth:`~io.BytesIO.getvalue` method.
Georg Brandl116aa622007-08-15 14:28:22 +0000102
Antoine Pitrouc3ed2e72010-09-29 10:49:46 +0000103 :class:`GzipFile` supports the :class:`io.BufferedIOBase` interface,
104 including iteration and the :keyword:`with` statement. Only the
105 :meth:`truncate` method isn't implemented.
Benjamin Petersone0124bd2009-03-09 21:04:33 +0000106
Antoine Pitrou7b998e92010-10-04 21:55:14 +0000107 :class:`GzipFile` also provides the following method:
108
109 .. method:: peek([n])
110
111 Read *n* uncompressed bytes without advancing the file position.
112 At most one single read on the compressed stream is done to satisfy
113 the call. The number of bytes returned may be more or less than
114 requested.
115
116 .. versionadded:: 3.2
117
Benjamin Peterson10745a92009-03-09 21:08:47 +0000118 .. versionchanged:: 3.1
Benjamin Petersone0124bd2009-03-09 21:04:33 +0000119 Support for the :keyword:`with` statement was added.
120
Antoine Pitrou8e33fd72010-01-13 14:37:26 +0000121 .. versionchanged:: 3.2
122 Support for zero-padded files was added.
123
Antoine Pitrou7b969842010-09-23 16:22:51 +0000124 .. versionchanged:: 3.2
125 Support for unseekable files was added.
126
Antoine Pitrou6b4be362011-04-04 21:09:05 +0200127 .. versionchanged:: 3.3
128 The :meth:`io.BufferedIOBase.read1` method is now implemented.
129
Georg Brandl116aa622007-08-15 14:28:22 +0000130
Antoine Pitrou79c5ef12010-08-17 21:10:05 +0000131.. function:: compress(data, compresslevel=9)
132
133 Compress the *data*, returning a :class:`bytes` object containing
134 the compressed data. *compresslevel* has the same meaning as in
135 the :class:`GzipFile` constructor above.
136
Antoine Pitroucdfe1c52010-08-17 21:15:00 +0000137 .. versionadded:: 3.2
138
Antoine Pitrou79c5ef12010-08-17 21:10:05 +0000139.. function:: decompress(data)
140
141 Decompress the *data*, returning a :class:`bytes` object containing the
142 uncompressed data.
143
Antoine Pitroucdfe1c52010-08-17 21:15:00 +0000144 .. versionadded:: 3.2
145
Georg Brandl116aa622007-08-15 14:28:22 +0000146
Christian Heimesbbe741d2008-03-28 10:53:29 +0000147.. _gzip-usage-examples:
148
149Examples of usage
150-----------------
151
152Example of how to read a compressed file::
153
154 import gzip
Antoine Pitroubf1a0182010-08-17 21:11:49 +0000155 with gzip.open('/home/joe/file.txt.gz', 'rb') as f:
156 file_content = f.read()
Christian Heimesbbe741d2008-03-28 10:53:29 +0000157
158Example of how to create a compressed GZIP file::
159
160 import gzip
Antoine Pitroubf1a0182010-08-17 21:11:49 +0000161 content = b"Lots of content here"
162 with gzip.open('/home/joe/file.txt.gz', 'wb') as f:
163 f.write(content)
Christian Heimesbbe741d2008-03-28 10:53:29 +0000164
165Example of how to GZIP compress an existing file::
166
167 import gzip
Antoine Pitroubf1a0182010-08-17 21:11:49 +0000168 with open('/home/joe/file.txt', 'rb') as f_in:
Éric Araujof5be0902010-08-17 21:24:05 +0000169 with gzip.open('/home/joe/file.txt.gz', 'wb') as f_out:
Antoine Pitroubf1a0182010-08-17 21:11:49 +0000170 f_out.writelines(f_in)
Christian Heimesbbe741d2008-03-28 10:53:29 +0000171
Antoine Pitrou79c5ef12010-08-17 21:10:05 +0000172Example of how to GZIP compress a binary string::
173
174 import gzip
175 s_in = b"Lots of content here"
176 s_out = gzip.compress(s_in)
Christian Heimesbbe741d2008-03-28 10:53:29 +0000177
Georg Brandl116aa622007-08-15 14:28:22 +0000178.. seealso::
179
180 Module :mod:`zlib`
181 The basic data compression module needed to support the :program:`gzip` file
182 format.
183