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