blob: 9e5799016e68e82bb7f57552b566c2aadb1830a3 [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
Antoine Pitrou11cb9612010-09-15 11:11:28 +000016The :mod:`gzip` module provides the :class:`GzipFile` class. The :class:`GzipFile`
17class reads and writes :program:`gzip`\ -format files, automatically compressing
18or decompressing the data so that it looks like an ordinary :term:`file object`.
Christian Heimesbbe741d2008-03-28 10:53:29 +000019
20Note that additional file formats which can be decompressed by the
21:program:`gzip` and :program:`gunzip` programs, such as those produced by
22:program:`compress` and :program:`pack`, are not supported by this module.
Georg Brandl116aa622007-08-15 14:28:22 +000023
Georg Brandl116aa622007-08-15 14:28:22 +000024The module defines the following items:
25
26
Georg Brandl036490d2009-05-17 13:00:36 +000027.. class:: GzipFile(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)
Georg Brandl116aa622007-08-15 14:28:22 +000028
Antoine Pitrouc3ed2e72010-09-29 10:49:46 +000029 Constructor for the :class:`GzipFile` class, which simulates most of the
30 methods of a :term:`file object`, with the exception of the :meth:`truncate`
31 method. At least one of *fileobj* and *filename* must be given a non-trivial
32 value.
Georg Brandl116aa622007-08-15 14:28:22 +000033
34 The new class instance is based on *fileobj*, which can be a regular file, a
35 :class:`StringIO` object, or any other object which simulates a file. It
36 defaults to ``None``, in which case *filename* is opened to provide a file
37 object.
38
39 When *fileobj* is not ``None``, the *filename* argument is only used to be
40 included in the :program:`gzip` file header, which may includes the original
41 filename of the uncompressed file. It defaults to the filename of *fileobj*, if
42 discernible; otherwise, it defaults to the empty string, and in this case the
43 original filename is not included in the header.
44
45 The *mode* argument can be any of ``'r'``, ``'rb'``, ``'a'``, ``'ab'``, ``'w'``,
46 or ``'wb'``, depending on whether the file will be read or written. The default
Nadeem Vawda30d94b72012-02-11 23:45:10 +020047 is the mode of *fileobj* if discernible; otherwise, the default is ``'rb'``.
48
49 Note that the file is always opened in binary mode; text mode is not
50 supported. If you need to read a compressed file in text mode, wrap your
51 :class:`GzipFile` with an :class:`io.TextIOWrapper`.
Georg Brandl116aa622007-08-15 14:28:22 +000052
53 The *compresslevel* argument is an integer from ``1`` to ``9`` controlling the
54 level of compression; ``1`` is fastest and produces the least compression, and
55 ``9`` is slowest and produces the most compression. The default is ``9``.
56
Antoine Pitrou42db3ef2009-01-04 21:37:59 +000057 The *mtime* argument is an optional numeric timestamp to be written to
Benjamin Petersone0124bd2009-03-09 21:04:33 +000058 the stream when compressing. All :program:`gzip` compressed streams are
Antoine Pitrou42db3ef2009-01-04 21:37:59 +000059 required to contain a timestamp. If omitted or ``None``, the current
60 time is used. This module ignores the timestamp when decompressing;
61 however, some programs, such as :program:`gunzip`\ , make use of it.
62 The format of the timestamp is the same as that of the return value of
Senthil Kumarana6bac952011-07-04 11:28:30 -070063 ``time.time()`` and of the ``st_mtime`` attribute of the object returned
Antoine Pitrou42db3ef2009-01-04 21:37:59 +000064 by ``os.stat()``.
65
Georg Brandl116aa622007-08-15 14:28:22 +000066 Calling a :class:`GzipFile` object's :meth:`close` method does not close
67 *fileobj*, since you might wish to append more material after the compressed
Antoine Pitroue5768cf2010-09-23 16:45:17 +000068 data. This also allows you to pass a :class:`io.BytesIO` object opened for
Georg Brandl116aa622007-08-15 14:28:22 +000069 writing as *fileobj*, and retrieve the resulting memory buffer using the
Antoine Pitroue5768cf2010-09-23 16:45:17 +000070 :class:`io.BytesIO` object's :meth:`~io.BytesIO.getvalue` method.
Georg Brandl116aa622007-08-15 14:28:22 +000071
Antoine Pitrouc3ed2e72010-09-29 10:49:46 +000072 :class:`GzipFile` supports the :class:`io.BufferedIOBase` interface,
73 including iteration and the :keyword:`with` statement. Only the
74 :meth:`truncate` method isn't implemented.
Benjamin Petersone0124bd2009-03-09 21:04:33 +000075
Antoine Pitrou7b998e92010-10-04 21:55:14 +000076 :class:`GzipFile` also provides the following method:
77
78 .. method:: peek([n])
79
80 Read *n* uncompressed bytes without advancing the file position.
81 At most one single read on the compressed stream is done to satisfy
82 the call. The number of bytes returned may be more or less than
83 requested.
84
85 .. versionadded:: 3.2
86
Benjamin Peterson10745a92009-03-09 21:08:47 +000087 .. versionchanged:: 3.1
Benjamin Petersone0124bd2009-03-09 21:04:33 +000088 Support for the :keyword:`with` statement was added.
89
Antoine Pitrou8e33fd72010-01-13 14:37:26 +000090 .. versionchanged:: 3.2
91 Support for zero-padded files was added.
92
Antoine Pitrou7b969842010-09-23 16:22:51 +000093 .. versionchanged:: 3.2
94 Support for unseekable files was added.
95
Antoine Pitrou6b4be362011-04-04 21:09:05 +020096 .. versionchanged:: 3.3
97 The :meth:`io.BufferedIOBase.read1` method is now implemented.
98
Georg Brandl116aa622007-08-15 14:28:22 +000099
Georg Brandl036490d2009-05-17 13:00:36 +0000100.. function:: open(filename, mode='rb', compresslevel=9)
Georg Brandl116aa622007-08-15 14:28:22 +0000101
102 This is a shorthand for ``GzipFile(filename,`` ``mode,`` ``compresslevel)``.
103 The *filename* argument is required; *mode* defaults to ``'rb'`` and
104 *compresslevel* defaults to ``9``.
105
Antoine Pitrou79c5ef12010-08-17 21:10:05 +0000106.. function:: compress(data, compresslevel=9)
107
108 Compress the *data*, returning a :class:`bytes` object containing
109 the compressed data. *compresslevel* has the same meaning as in
110 the :class:`GzipFile` constructor above.
111
Antoine Pitroucdfe1c52010-08-17 21:15:00 +0000112 .. versionadded:: 3.2
113
Antoine Pitrou79c5ef12010-08-17 21:10:05 +0000114.. function:: decompress(data)
115
116 Decompress the *data*, returning a :class:`bytes` object containing the
117 uncompressed data.
118
Antoine Pitroucdfe1c52010-08-17 21:15:00 +0000119 .. versionadded:: 3.2
120
Georg Brandl116aa622007-08-15 14:28:22 +0000121
Christian Heimesbbe741d2008-03-28 10:53:29 +0000122.. _gzip-usage-examples:
123
124Examples of usage
125-----------------
126
127Example of how to read a compressed file::
128
129 import gzip
Antoine Pitroubf1a0182010-08-17 21:11:49 +0000130 with gzip.open('/home/joe/file.txt.gz', 'rb') as f:
131 file_content = f.read()
Christian Heimesbbe741d2008-03-28 10:53:29 +0000132
133Example of how to create a compressed GZIP file::
134
135 import gzip
Antoine Pitroubf1a0182010-08-17 21:11:49 +0000136 content = b"Lots of content here"
137 with gzip.open('/home/joe/file.txt.gz', 'wb') as f:
138 f.write(content)
Christian Heimesbbe741d2008-03-28 10:53:29 +0000139
140Example of how to GZIP compress an existing file::
141
142 import gzip
Antoine Pitroubf1a0182010-08-17 21:11:49 +0000143 with open('/home/joe/file.txt', 'rb') as f_in:
Éric Araujof5be0902010-08-17 21:24:05 +0000144 with gzip.open('/home/joe/file.txt.gz', 'wb') as f_out:
Antoine Pitroubf1a0182010-08-17 21:11:49 +0000145 f_out.writelines(f_in)
Christian Heimesbbe741d2008-03-28 10:53:29 +0000146
Antoine Pitrou79c5ef12010-08-17 21:10:05 +0000147Example of how to GZIP compress a binary string::
148
149 import gzip
150 s_in = b"Lots of content here"
151 s_out = gzip.compress(s_in)
Christian Heimesbbe741d2008-03-28 10:53:29 +0000152
Georg Brandl116aa622007-08-15 14:28:22 +0000153.. seealso::
154
155 Module :mod:`zlib`
156 The basic data compression module needed to support the :program:`gzip` file
157 format.
158