blob: 8aca2dd95641974afa369a7193ac1a6419a01f06 [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
47 is the mode of *fileobj* if discernible; otherwise, the default is ``'rb'``. If
48 not given, the 'b' flag will be added to the mode to ensure the file is opened
49 in binary mode for cross-platform portability.
50
51 The *compresslevel* argument is an integer from ``1`` to ``9`` controlling the
52 level of compression; ``1`` is fastest and produces the least compression, and
53 ``9`` is slowest and produces the most compression. The default is ``9``.
54
Antoine Pitrou42db3ef2009-01-04 21:37:59 +000055 The *mtime* argument is an optional numeric timestamp to be written to
Benjamin Petersone0124bd2009-03-09 21:04:33 +000056 the stream when compressing. All :program:`gzip` compressed streams are
Antoine Pitrou42db3ef2009-01-04 21:37:59 +000057 required to contain a timestamp. If omitted or ``None``, the current
58 time is used. This module ignores the timestamp when decompressing;
59 however, some programs, such as :program:`gunzip`\ , make use of it.
60 The format of the timestamp is the same as that of the return value of
Senthil Kumarana6bac952011-07-04 11:28:30 -070061 ``time.time()`` and of the ``st_mtime`` attribute of the object returned
Antoine Pitrou42db3ef2009-01-04 21:37:59 +000062 by ``os.stat()``.
63
Georg Brandl116aa622007-08-15 14:28:22 +000064 Calling a :class:`GzipFile` object's :meth:`close` method does not close
65 *fileobj*, since you might wish to append more material after the compressed
Antoine Pitroue5768cf2010-09-23 16:45:17 +000066 data. This also allows you to pass a :class:`io.BytesIO` object opened for
Georg Brandl116aa622007-08-15 14:28:22 +000067 writing as *fileobj*, and retrieve the resulting memory buffer using the
Antoine Pitroue5768cf2010-09-23 16:45:17 +000068 :class:`io.BytesIO` object's :meth:`~io.BytesIO.getvalue` method.
Georg Brandl116aa622007-08-15 14:28:22 +000069
Antoine Pitrouc3ed2e72010-09-29 10:49:46 +000070 :class:`GzipFile` supports the :class:`io.BufferedIOBase` interface,
71 including iteration and the :keyword:`with` statement. Only the
Antoine Pitroue8860472011-04-04 21:06:20 +020072 :meth:`read1` and :meth:`truncate` methods aren't implemented.
Benjamin Petersone0124bd2009-03-09 21:04:33 +000073
Antoine Pitrou7b998e92010-10-04 21:55:14 +000074 :class:`GzipFile` also provides the following method:
75
76 .. method:: peek([n])
77
78 Read *n* uncompressed bytes without advancing the file position.
79 At most one single read on the compressed stream is done to satisfy
80 the call. The number of bytes returned may be more or less than
81 requested.
82
83 .. versionadded:: 3.2
84
Benjamin Peterson10745a92009-03-09 21:08:47 +000085 .. versionchanged:: 3.1
Benjamin Petersone0124bd2009-03-09 21:04:33 +000086 Support for the :keyword:`with` statement was added.
87
Antoine Pitrou8e33fd72010-01-13 14:37:26 +000088 .. versionchanged:: 3.2
89 Support for zero-padded files was added.
90
Antoine Pitrou7b969842010-09-23 16:22:51 +000091 .. versionchanged:: 3.2
92 Support for unseekable files was added.
93
Georg Brandl116aa622007-08-15 14:28:22 +000094
Georg Brandl036490d2009-05-17 13:00:36 +000095.. function:: open(filename, mode='rb', compresslevel=9)
Georg Brandl116aa622007-08-15 14:28:22 +000096
97 This is a shorthand for ``GzipFile(filename,`` ``mode,`` ``compresslevel)``.
98 The *filename* argument is required; *mode* defaults to ``'rb'`` and
99 *compresslevel* defaults to ``9``.
100
Antoine Pitrou79c5ef12010-08-17 21:10:05 +0000101.. function:: compress(data, compresslevel=9)
102
103 Compress the *data*, returning a :class:`bytes` object containing
104 the compressed data. *compresslevel* has the same meaning as in
105 the :class:`GzipFile` constructor above.
106
Antoine Pitroucdfe1c52010-08-17 21:15:00 +0000107 .. versionadded:: 3.2
108
Antoine Pitrou79c5ef12010-08-17 21:10:05 +0000109.. function:: decompress(data)
110
111 Decompress the *data*, returning a :class:`bytes` object containing the
112 uncompressed data.
113
Antoine Pitroucdfe1c52010-08-17 21:15:00 +0000114 .. versionadded:: 3.2
115
Georg Brandl116aa622007-08-15 14:28:22 +0000116
Christian Heimesbbe741d2008-03-28 10:53:29 +0000117.. _gzip-usage-examples:
118
119Examples of usage
120-----------------
121
122Example of how to read a compressed file::
123
124 import gzip
Antoine Pitroubf1a0182010-08-17 21:11:49 +0000125 with gzip.open('/home/joe/file.txt.gz', 'rb') as f:
126 file_content = f.read()
Christian Heimesbbe741d2008-03-28 10:53:29 +0000127
128Example of how to create a compressed GZIP file::
129
130 import gzip
Antoine Pitroubf1a0182010-08-17 21:11:49 +0000131 content = b"Lots of content here"
132 with gzip.open('/home/joe/file.txt.gz', 'wb') as f:
133 f.write(content)
Christian Heimesbbe741d2008-03-28 10:53:29 +0000134
135Example of how to GZIP compress an existing file::
136
137 import gzip
Antoine Pitroubf1a0182010-08-17 21:11:49 +0000138 with open('/home/joe/file.txt', 'rb') as f_in:
Éric Araujof5be0902010-08-17 21:24:05 +0000139 with gzip.open('/home/joe/file.txt.gz', 'wb') as f_out:
Antoine Pitroubf1a0182010-08-17 21:11:49 +0000140 f_out.writelines(f_in)
Christian Heimesbbe741d2008-03-28 10:53:29 +0000141
Antoine Pitrou79c5ef12010-08-17 21:10:05 +0000142Example of how to GZIP compress a binary string::
143
144 import gzip
145 s_in = b"Lots of content here"
146 s_out = gzip.compress(s_in)
Christian Heimesbbe741d2008-03-28 10:53:29 +0000147
Georg Brandl116aa622007-08-15 14:28:22 +0000148.. seealso::
149
150 Module :mod:`zlib`
151 The basic data compression module needed to support the :program:`gzip` file
152 format.
153