17db96d56Sopenharmony_ci:mod:`gzip` --- Support for :program:`gzip` files
27db96d56Sopenharmony_ci=================================================
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. module:: gzip
57db96d56Sopenharmony_ci   :synopsis: Interfaces for gzip compression and decompression using file objects.
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci**Source code:** :source:`Lib/gzip.py`
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ci--------------
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ciThis module provides a simple interface to compress and decompress files just
127db96d56Sopenharmony_cilike the GNU programs :program:`gzip` and :program:`gunzip` would.
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_ciThe data compression is provided by the :mod:`zlib` module.
157db96d56Sopenharmony_ci
167db96d56Sopenharmony_ciThe :mod:`gzip` module provides the :class:`GzipFile` class, as well as the
177db96d56Sopenharmony_ci:func:`.open`, :func:`compress` and :func:`decompress` convenience functions.
187db96d56Sopenharmony_ciThe :class:`GzipFile` class reads and writes :program:`gzip`\ -format files,
197db96d56Sopenharmony_ciautomatically compressing or decompressing the data so that it looks like an
207db96d56Sopenharmony_ciordinary :term:`file object`.
217db96d56Sopenharmony_ci
227db96d56Sopenharmony_ciNote that additional file formats which can be decompressed by the
237db96d56Sopenharmony_ci:program:`gzip` and :program:`gunzip` programs, such  as those produced by
247db96d56Sopenharmony_ci:program:`compress` and :program:`pack`, are not supported by this module.
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_ciThe module defines the following items:
277db96d56Sopenharmony_ci
287db96d56Sopenharmony_ci
297db96d56Sopenharmony_ci.. function:: open(filename, mode='rb', compresslevel=9, encoding=None, errors=None, newline=None)
307db96d56Sopenharmony_ci
317db96d56Sopenharmony_ci   Open a gzip-compressed file in binary or text mode, returning a :term:`file
327db96d56Sopenharmony_ci   object`.
337db96d56Sopenharmony_ci
347db96d56Sopenharmony_ci   The *filename* argument can be an actual filename (a :class:`str` or
357db96d56Sopenharmony_ci   :class:`bytes` object), or an existing file object to read from or write to.
367db96d56Sopenharmony_ci
377db96d56Sopenharmony_ci   The *mode* argument can be any of ``'r'``, ``'rb'``, ``'a'``, ``'ab'``,
387db96d56Sopenharmony_ci   ``'w'``, ``'wb'``, ``'x'`` or ``'xb'`` for binary mode, or ``'rt'``,
397db96d56Sopenharmony_ci   ``'at'``, ``'wt'``, or ``'xt'`` for text mode. The default is ``'rb'``.
407db96d56Sopenharmony_ci
417db96d56Sopenharmony_ci   The *compresslevel* argument is an integer from 0 to 9, as for the
427db96d56Sopenharmony_ci   :class:`GzipFile` constructor.
437db96d56Sopenharmony_ci
447db96d56Sopenharmony_ci   For binary mode, this function is equivalent to the :class:`GzipFile`
457db96d56Sopenharmony_ci   constructor: ``GzipFile(filename, mode, compresslevel)``. In this case, the
467db96d56Sopenharmony_ci   *encoding*, *errors* and *newline* arguments must not be provided.
477db96d56Sopenharmony_ci
487db96d56Sopenharmony_ci   For text mode, a :class:`GzipFile` object is created, and wrapped in an
497db96d56Sopenharmony_ci   :class:`io.TextIOWrapper` instance with the specified encoding, error
507db96d56Sopenharmony_ci   handling behavior, and line ending(s).
517db96d56Sopenharmony_ci
527db96d56Sopenharmony_ci   .. versionchanged:: 3.3
537db96d56Sopenharmony_ci      Added support for *filename* being a file object, support for text mode,
547db96d56Sopenharmony_ci      and the *encoding*, *errors* and *newline* arguments.
557db96d56Sopenharmony_ci
567db96d56Sopenharmony_ci   .. versionchanged:: 3.4
577db96d56Sopenharmony_ci      Added support for the ``'x'``, ``'xb'`` and ``'xt'`` modes.
587db96d56Sopenharmony_ci
597db96d56Sopenharmony_ci   .. versionchanged:: 3.6
607db96d56Sopenharmony_ci      Accepts a :term:`path-like object`.
617db96d56Sopenharmony_ci
627db96d56Sopenharmony_ci.. exception:: BadGzipFile
637db96d56Sopenharmony_ci
647db96d56Sopenharmony_ci   An exception raised for invalid gzip files.  It inherits :exc:`OSError`.
657db96d56Sopenharmony_ci   :exc:`EOFError` and :exc:`zlib.error` can also be raised for invalid gzip
667db96d56Sopenharmony_ci   files.
677db96d56Sopenharmony_ci
687db96d56Sopenharmony_ci   .. versionadded:: 3.8
697db96d56Sopenharmony_ci
707db96d56Sopenharmony_ci.. class:: GzipFile(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)
717db96d56Sopenharmony_ci
727db96d56Sopenharmony_ci   Constructor for the :class:`GzipFile` class, which simulates most of the
737db96d56Sopenharmony_ci   methods of a :term:`file object`, with the exception of the :meth:`truncate`
747db96d56Sopenharmony_ci   method.  At least one of *fileobj* and *filename* must be given a non-trivial
757db96d56Sopenharmony_ci   value.
767db96d56Sopenharmony_ci
777db96d56Sopenharmony_ci   The new class instance is based on *fileobj*, which can be a regular file, an
787db96d56Sopenharmony_ci   :class:`io.BytesIO` object, or any other object which simulates a file.  It
797db96d56Sopenharmony_ci   defaults to ``None``, in which case *filename* is opened to provide a file
807db96d56Sopenharmony_ci   object.
817db96d56Sopenharmony_ci
827db96d56Sopenharmony_ci   When *fileobj* is not ``None``, the *filename* argument is only used to be
837db96d56Sopenharmony_ci   included in the :program:`gzip` file header, which may include the original
847db96d56Sopenharmony_ci   filename of the uncompressed file.  It defaults to the filename of *fileobj*, if
857db96d56Sopenharmony_ci   discernible; otherwise, it defaults to the empty string, and in this case the
867db96d56Sopenharmony_ci   original filename is not included in the header.
877db96d56Sopenharmony_ci
887db96d56Sopenharmony_ci   The *mode* argument can be any of ``'r'``, ``'rb'``, ``'a'``, ``'ab'``, ``'w'``,
897db96d56Sopenharmony_ci   ``'wb'``, ``'x'``, or ``'xb'``, depending on whether the file will be read or
907db96d56Sopenharmony_ci   written.  The default is the mode of *fileobj* if discernible; otherwise, the
917db96d56Sopenharmony_ci   default is ``'rb'``.  In future Python releases the mode of *fileobj* will
927db96d56Sopenharmony_ci   not be used.  It is better to always specify *mode* for writing.
937db96d56Sopenharmony_ci
947db96d56Sopenharmony_ci   Note that the file is always opened in binary mode. To open a compressed file
957db96d56Sopenharmony_ci   in text mode, use :func:`.open` (or wrap your :class:`GzipFile` with an
967db96d56Sopenharmony_ci   :class:`io.TextIOWrapper`).
977db96d56Sopenharmony_ci
987db96d56Sopenharmony_ci   The *compresslevel* argument is an integer from ``0`` to ``9`` controlling
997db96d56Sopenharmony_ci   the level of compression; ``1`` is fastest and produces the least
1007db96d56Sopenharmony_ci   compression, and ``9`` is slowest and produces the most compression. ``0``
1017db96d56Sopenharmony_ci   is no compression. The default is ``9``.
1027db96d56Sopenharmony_ci
1037db96d56Sopenharmony_ci   The *mtime* argument is an optional numeric timestamp to be written to
1047db96d56Sopenharmony_ci   the last modification time field in the stream when compressing.  It
1057db96d56Sopenharmony_ci   should only be provided in compression mode.  If omitted or ``None``, the
1067db96d56Sopenharmony_ci   current time is used.  See the :attr:`mtime` attribute for more details.
1077db96d56Sopenharmony_ci
1087db96d56Sopenharmony_ci   Calling a :class:`GzipFile` object's :meth:`close` method does not close
1097db96d56Sopenharmony_ci   *fileobj*, since you might wish to append more material after the compressed
1107db96d56Sopenharmony_ci   data.  This also allows you to pass an :class:`io.BytesIO` object opened for
1117db96d56Sopenharmony_ci   writing as *fileobj*, and retrieve the resulting memory buffer using the
1127db96d56Sopenharmony_ci   :class:`io.BytesIO` object's :meth:`~io.BytesIO.getvalue` method.
1137db96d56Sopenharmony_ci
1147db96d56Sopenharmony_ci   :class:`GzipFile` supports the :class:`io.BufferedIOBase` interface,
1157db96d56Sopenharmony_ci   including iteration and the :keyword:`with` statement.  Only the
1167db96d56Sopenharmony_ci   :meth:`truncate` method isn't implemented.
1177db96d56Sopenharmony_ci
1187db96d56Sopenharmony_ci   :class:`GzipFile` also provides the following method and attribute:
1197db96d56Sopenharmony_ci
1207db96d56Sopenharmony_ci   .. method:: peek(n)
1217db96d56Sopenharmony_ci
1227db96d56Sopenharmony_ci      Read *n* uncompressed bytes without advancing the file position.
1237db96d56Sopenharmony_ci      At most one single read on the compressed stream is done to satisfy
1247db96d56Sopenharmony_ci      the call.  The number of bytes returned may be more or less than
1257db96d56Sopenharmony_ci      requested.
1267db96d56Sopenharmony_ci
1277db96d56Sopenharmony_ci      .. note:: While calling :meth:`peek` does not change the file position of
1287db96d56Sopenharmony_ci         the :class:`GzipFile`, it may change the position of the underlying
1297db96d56Sopenharmony_ci         file object (e.g. if the :class:`GzipFile` was constructed with the
1307db96d56Sopenharmony_ci         *fileobj* parameter).
1317db96d56Sopenharmony_ci
1327db96d56Sopenharmony_ci      .. versionadded:: 3.2
1337db96d56Sopenharmony_ci
1347db96d56Sopenharmony_ci   .. attribute:: mtime
1357db96d56Sopenharmony_ci
1367db96d56Sopenharmony_ci      When decompressing, the value of the last modification time field in
1377db96d56Sopenharmony_ci      the most recently read header may be read from this attribute, as an
1387db96d56Sopenharmony_ci      integer.  The initial value before reading any headers is ``None``.
1397db96d56Sopenharmony_ci
1407db96d56Sopenharmony_ci      All :program:`gzip` compressed streams are required to contain this
1417db96d56Sopenharmony_ci      timestamp field.  Some programs, such as :program:`gunzip`\ , make use
1427db96d56Sopenharmony_ci      of the timestamp.  The format is the same as the return value of
1437db96d56Sopenharmony_ci      :func:`time.time` and the :attr:`~os.stat_result.st_mtime` attribute of
1447db96d56Sopenharmony_ci      the object returned by :func:`os.stat`.
1457db96d56Sopenharmony_ci
1467db96d56Sopenharmony_ci   .. attribute:: name
1477db96d56Sopenharmony_ci
1487db96d56Sopenharmony_ci      The path to the gzip file on disk, as a :class:`str` or :class:`bytes`.
1497db96d56Sopenharmony_ci      Equivalent to the output of :func:`os.fspath` on the original input path,
1507db96d56Sopenharmony_ci      with no other normalization, resolution or expansion.
1517db96d56Sopenharmony_ci
1527db96d56Sopenharmony_ci   .. versionchanged:: 3.1
1537db96d56Sopenharmony_ci      Support for the :keyword:`with` statement was added, along with the
1547db96d56Sopenharmony_ci      *mtime* constructor argument and :attr:`mtime` attribute.
1557db96d56Sopenharmony_ci
1567db96d56Sopenharmony_ci   .. versionchanged:: 3.2
1577db96d56Sopenharmony_ci      Support for zero-padded and unseekable files was added.
1587db96d56Sopenharmony_ci
1597db96d56Sopenharmony_ci   .. versionchanged:: 3.3
1607db96d56Sopenharmony_ci      The :meth:`io.BufferedIOBase.read1` method is now implemented.
1617db96d56Sopenharmony_ci
1627db96d56Sopenharmony_ci   .. versionchanged:: 3.4
1637db96d56Sopenharmony_ci      Added support for the ``'x'`` and ``'xb'`` modes.
1647db96d56Sopenharmony_ci
1657db96d56Sopenharmony_ci   .. versionchanged:: 3.5
1667db96d56Sopenharmony_ci      Added support for writing arbitrary
1677db96d56Sopenharmony_ci      :term:`bytes-like objects <bytes-like object>`.
1687db96d56Sopenharmony_ci      The :meth:`~io.BufferedIOBase.read` method now accepts an argument of
1697db96d56Sopenharmony_ci      ``None``.
1707db96d56Sopenharmony_ci
1717db96d56Sopenharmony_ci   .. versionchanged:: 3.6
1727db96d56Sopenharmony_ci      Accepts a :term:`path-like object`.
1737db96d56Sopenharmony_ci
1747db96d56Sopenharmony_ci   .. deprecated:: 3.9
1757db96d56Sopenharmony_ci      Opening :class:`GzipFile` for writing without specifying the *mode*
1767db96d56Sopenharmony_ci      argument is deprecated.
1777db96d56Sopenharmony_ci
1787db96d56Sopenharmony_ci
1797db96d56Sopenharmony_ci.. function:: compress(data, compresslevel=9, *, mtime=None)
1807db96d56Sopenharmony_ci
1817db96d56Sopenharmony_ci   Compress the *data*, returning a :class:`bytes` object containing
1827db96d56Sopenharmony_ci   the compressed data.  *compresslevel* and *mtime* have the same meaning as in
1837db96d56Sopenharmony_ci   the :class:`GzipFile` constructor above. When *mtime* is set to ``0``, this
1847db96d56Sopenharmony_ci   function is equivalent to :func:`zlib.compress` with *wbits* set to ``31``.
1857db96d56Sopenharmony_ci   The zlib function is faster.
1867db96d56Sopenharmony_ci
1877db96d56Sopenharmony_ci   .. versionadded:: 3.2
1887db96d56Sopenharmony_ci   .. versionchanged:: 3.8
1897db96d56Sopenharmony_ci      Added the *mtime* parameter for reproducible output.
1907db96d56Sopenharmony_ci   .. versionchanged:: 3.11
1917db96d56Sopenharmony_ci      Speed is improved by compressing all data at once instead of in a
1927db96d56Sopenharmony_ci      streamed fashion. Calls with *mtime* set to ``0`` are delegated to
1937db96d56Sopenharmony_ci      :func:`zlib.compress` for better speed.
1947db96d56Sopenharmony_ci
1957db96d56Sopenharmony_ci.. function:: decompress(data)
1967db96d56Sopenharmony_ci
1977db96d56Sopenharmony_ci   Decompress the *data*, returning a :class:`bytes` object containing the
1987db96d56Sopenharmony_ci   uncompressed data. This function is capable of decompressing multi-member
1997db96d56Sopenharmony_ci   gzip data (multiple gzip blocks concatenated together). When the data is
2007db96d56Sopenharmony_ci   certain to contain only one member the :func:`zlib.decompress` function with
2017db96d56Sopenharmony_ci   *wbits* set to 31 is faster.
2027db96d56Sopenharmony_ci
2037db96d56Sopenharmony_ci   .. versionadded:: 3.2
2047db96d56Sopenharmony_ci   .. versionchanged:: 3.11
2057db96d56Sopenharmony_ci      Speed is improved by decompressing members at once in memory instead of in
2067db96d56Sopenharmony_ci      a streamed fashion.
2077db96d56Sopenharmony_ci
2087db96d56Sopenharmony_ci.. _gzip-usage-examples:
2097db96d56Sopenharmony_ci
2107db96d56Sopenharmony_ciExamples of usage
2117db96d56Sopenharmony_ci-----------------
2127db96d56Sopenharmony_ci
2137db96d56Sopenharmony_ciExample of how to read a compressed file::
2147db96d56Sopenharmony_ci
2157db96d56Sopenharmony_ci   import gzip
2167db96d56Sopenharmony_ci   with gzip.open('/home/joe/file.txt.gz', 'rb') as f:
2177db96d56Sopenharmony_ci       file_content = f.read()
2187db96d56Sopenharmony_ci
2197db96d56Sopenharmony_ciExample of how to create a compressed GZIP file::
2207db96d56Sopenharmony_ci
2217db96d56Sopenharmony_ci   import gzip
2227db96d56Sopenharmony_ci   content = b"Lots of content here"
2237db96d56Sopenharmony_ci   with gzip.open('/home/joe/file.txt.gz', 'wb') as f:
2247db96d56Sopenharmony_ci       f.write(content)
2257db96d56Sopenharmony_ci
2267db96d56Sopenharmony_ciExample of how to GZIP compress an existing file::
2277db96d56Sopenharmony_ci
2287db96d56Sopenharmony_ci   import gzip
2297db96d56Sopenharmony_ci   import shutil
2307db96d56Sopenharmony_ci   with open('/home/joe/file.txt', 'rb') as f_in:
2317db96d56Sopenharmony_ci       with gzip.open('/home/joe/file.txt.gz', 'wb') as f_out:
2327db96d56Sopenharmony_ci           shutil.copyfileobj(f_in, f_out)
2337db96d56Sopenharmony_ci
2347db96d56Sopenharmony_ciExample of how to GZIP compress a binary string::
2357db96d56Sopenharmony_ci
2367db96d56Sopenharmony_ci   import gzip
2377db96d56Sopenharmony_ci   s_in = b"Lots of content here"
2387db96d56Sopenharmony_ci   s_out = gzip.compress(s_in)
2397db96d56Sopenharmony_ci
2407db96d56Sopenharmony_ci.. seealso::
2417db96d56Sopenharmony_ci
2427db96d56Sopenharmony_ci   Module :mod:`zlib`
2437db96d56Sopenharmony_ci      The basic data compression module needed to support the :program:`gzip` file
2447db96d56Sopenharmony_ci      format.
2457db96d56Sopenharmony_ci
2467db96d56Sopenharmony_ci
2477db96d56Sopenharmony_ci.. program:: gzip
2487db96d56Sopenharmony_ci
2497db96d56Sopenharmony_ciCommand Line Interface
2507db96d56Sopenharmony_ci----------------------
2517db96d56Sopenharmony_ci
2527db96d56Sopenharmony_ciThe :mod:`gzip` module provides a simple command line interface to compress or
2537db96d56Sopenharmony_cidecompress files.
2547db96d56Sopenharmony_ci
2557db96d56Sopenharmony_ciOnce executed the :mod:`gzip` module keeps the input file(s).
2567db96d56Sopenharmony_ci
2577db96d56Sopenharmony_ci.. versionchanged:: 3.8
2587db96d56Sopenharmony_ci
2597db96d56Sopenharmony_ci   Add a new command line interface with a usage.
2607db96d56Sopenharmony_ci   By default, when you will execute the CLI, the default compression level is 6.
2617db96d56Sopenharmony_ci
2627db96d56Sopenharmony_ciCommand line options
2637db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^
2647db96d56Sopenharmony_ci
2657db96d56Sopenharmony_ci.. cmdoption:: file
2667db96d56Sopenharmony_ci
2677db96d56Sopenharmony_ci   If *file* is not specified, read from :attr:`sys.stdin`.
2687db96d56Sopenharmony_ci
2697db96d56Sopenharmony_ci.. cmdoption:: --fast
2707db96d56Sopenharmony_ci
2717db96d56Sopenharmony_ci   Indicates the fastest compression method (less compression).
2727db96d56Sopenharmony_ci
2737db96d56Sopenharmony_ci.. cmdoption:: --best
2747db96d56Sopenharmony_ci
2757db96d56Sopenharmony_ci   Indicates the slowest compression method (best compression).
2767db96d56Sopenharmony_ci
2777db96d56Sopenharmony_ci.. cmdoption:: -d, --decompress
2787db96d56Sopenharmony_ci
2797db96d56Sopenharmony_ci   Decompress the given file.
2807db96d56Sopenharmony_ci
2817db96d56Sopenharmony_ci.. cmdoption:: -h, --help
2827db96d56Sopenharmony_ci
2837db96d56Sopenharmony_ci   Show the help message.
2847db96d56Sopenharmony_ci
285