17db96d56Sopenharmony_ci:mod:`zipfile` --- Work with ZIP archives 27db96d56Sopenharmony_ci========================================= 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ci.. module:: zipfile 57db96d56Sopenharmony_ci :synopsis: Read and write ZIP-format archive files. 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_ci.. moduleauthor:: James C. Ahlstrom <jim@interet.com> 87db96d56Sopenharmony_ci.. sectionauthor:: James C. Ahlstrom <jim@interet.com> 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_ci**Source code:** :source:`Lib/zipfile.py` 117db96d56Sopenharmony_ci 127db96d56Sopenharmony_ci-------------- 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ciThe ZIP file format is a common archive and compression standard. This module 157db96d56Sopenharmony_ciprovides tools to create, read, write, append, and list a ZIP file. Any 167db96d56Sopenharmony_ciadvanced use of this module will require an understanding of the format, as 177db96d56Sopenharmony_cidefined in `PKZIP Application Note`_. 187db96d56Sopenharmony_ci 197db96d56Sopenharmony_ciThis module does not currently handle multi-disk ZIP files. 207db96d56Sopenharmony_ciIt can handle ZIP files that use the ZIP64 extensions 217db96d56Sopenharmony_ci(that is ZIP files that are more than 4 GiB in size). It supports 227db96d56Sopenharmony_cidecryption of encrypted files in ZIP archives, but it currently cannot 237db96d56Sopenharmony_cicreate an encrypted file. Decryption is extremely slow as it is 247db96d56Sopenharmony_ciimplemented in native Python rather than C. 257db96d56Sopenharmony_ci 267db96d56Sopenharmony_ciThe module defines the following items: 277db96d56Sopenharmony_ci 287db96d56Sopenharmony_ci.. exception:: BadZipFile 297db96d56Sopenharmony_ci 307db96d56Sopenharmony_ci The error raised for bad ZIP files. 317db96d56Sopenharmony_ci 327db96d56Sopenharmony_ci .. versionadded:: 3.2 337db96d56Sopenharmony_ci 347db96d56Sopenharmony_ci 357db96d56Sopenharmony_ci.. exception:: BadZipfile 367db96d56Sopenharmony_ci 377db96d56Sopenharmony_ci Alias of :exc:`BadZipFile`, for compatibility with older Python versions. 387db96d56Sopenharmony_ci 397db96d56Sopenharmony_ci .. deprecated:: 3.2 407db96d56Sopenharmony_ci 417db96d56Sopenharmony_ci 427db96d56Sopenharmony_ci.. exception:: LargeZipFile 437db96d56Sopenharmony_ci 447db96d56Sopenharmony_ci The error raised when a ZIP file would require ZIP64 functionality but that has 457db96d56Sopenharmony_ci not been enabled. 467db96d56Sopenharmony_ci 477db96d56Sopenharmony_ci 487db96d56Sopenharmony_ci.. class:: ZipFile 497db96d56Sopenharmony_ci :noindex: 507db96d56Sopenharmony_ci 517db96d56Sopenharmony_ci The class for reading and writing ZIP files. See section 527db96d56Sopenharmony_ci :ref:`zipfile-objects` for constructor details. 537db96d56Sopenharmony_ci 547db96d56Sopenharmony_ci 557db96d56Sopenharmony_ci.. class:: Path 567db96d56Sopenharmony_ci :noindex: 577db96d56Sopenharmony_ci 587db96d56Sopenharmony_ci Class that implements a subset of the interface provided by 597db96d56Sopenharmony_ci :class:`pathlib.Path`, including the full 607db96d56Sopenharmony_ci :class:`importlib.resources.abc.Traversable` interface. 617db96d56Sopenharmony_ci 627db96d56Sopenharmony_ci .. versionadded:: 3.8 637db96d56Sopenharmony_ci 647db96d56Sopenharmony_ci 657db96d56Sopenharmony_ci.. class:: PyZipFile 667db96d56Sopenharmony_ci :noindex: 677db96d56Sopenharmony_ci 687db96d56Sopenharmony_ci Class for creating ZIP archives containing Python libraries. 697db96d56Sopenharmony_ci 707db96d56Sopenharmony_ci 717db96d56Sopenharmony_ci.. class:: ZipInfo(filename='NoName', date_time=(1980,1,1,0,0,0)) 727db96d56Sopenharmony_ci 737db96d56Sopenharmony_ci Class used to represent information about a member of an archive. Instances 747db96d56Sopenharmony_ci of this class are returned by the :meth:`.getinfo` and :meth:`.infolist` 757db96d56Sopenharmony_ci methods of :class:`ZipFile` objects. Most users of the :mod:`zipfile` module 767db96d56Sopenharmony_ci will not need to create these, but only use those created by this 777db96d56Sopenharmony_ci module. *filename* should be the full name of the archive member, and 787db96d56Sopenharmony_ci *date_time* should be a tuple containing six fields which describe the time 797db96d56Sopenharmony_ci of the last modification to the file; the fields are described in section 807db96d56Sopenharmony_ci :ref:`zipinfo-objects`. 817db96d56Sopenharmony_ci 827db96d56Sopenharmony_ci.. function:: is_zipfile(filename) 837db96d56Sopenharmony_ci 847db96d56Sopenharmony_ci Returns ``True`` if *filename* is a valid ZIP file based on its magic number, 857db96d56Sopenharmony_ci otherwise returns ``False``. *filename* may be a file or file-like object too. 867db96d56Sopenharmony_ci 877db96d56Sopenharmony_ci .. versionchanged:: 3.1 887db96d56Sopenharmony_ci Support for file and file-like objects. 897db96d56Sopenharmony_ci 907db96d56Sopenharmony_ci 917db96d56Sopenharmony_ci.. data:: ZIP_STORED 927db96d56Sopenharmony_ci 937db96d56Sopenharmony_ci The numeric constant for an uncompressed archive member. 947db96d56Sopenharmony_ci 957db96d56Sopenharmony_ci 967db96d56Sopenharmony_ci.. data:: ZIP_DEFLATED 977db96d56Sopenharmony_ci 987db96d56Sopenharmony_ci The numeric constant for the usual ZIP compression method. This requires the 997db96d56Sopenharmony_ci :mod:`zlib` module. 1007db96d56Sopenharmony_ci 1017db96d56Sopenharmony_ci 1027db96d56Sopenharmony_ci.. data:: ZIP_BZIP2 1037db96d56Sopenharmony_ci 1047db96d56Sopenharmony_ci The numeric constant for the BZIP2 compression method. This requires the 1057db96d56Sopenharmony_ci :mod:`bz2` module. 1067db96d56Sopenharmony_ci 1077db96d56Sopenharmony_ci .. versionadded:: 3.3 1087db96d56Sopenharmony_ci 1097db96d56Sopenharmony_ci.. data:: ZIP_LZMA 1107db96d56Sopenharmony_ci 1117db96d56Sopenharmony_ci The numeric constant for the LZMA compression method. This requires the 1127db96d56Sopenharmony_ci :mod:`lzma` module. 1137db96d56Sopenharmony_ci 1147db96d56Sopenharmony_ci .. versionadded:: 3.3 1157db96d56Sopenharmony_ci 1167db96d56Sopenharmony_ci .. note:: 1177db96d56Sopenharmony_ci 1187db96d56Sopenharmony_ci The ZIP file format specification has included support for bzip2 compression 1197db96d56Sopenharmony_ci since 2001, and for LZMA compression since 2006. However, some tools 1207db96d56Sopenharmony_ci (including older Python releases) do not support these compression 1217db96d56Sopenharmony_ci methods, and may either refuse to process the ZIP file altogether, 1227db96d56Sopenharmony_ci or fail to extract individual files. 1237db96d56Sopenharmony_ci 1247db96d56Sopenharmony_ci 1257db96d56Sopenharmony_ci.. seealso:: 1267db96d56Sopenharmony_ci 1277db96d56Sopenharmony_ci `PKZIP Application Note`_ 1287db96d56Sopenharmony_ci Documentation on the ZIP file format by Phil Katz, the creator of the format and 1297db96d56Sopenharmony_ci algorithms used. 1307db96d56Sopenharmony_ci 1317db96d56Sopenharmony_ci `Info-ZIP Home Page <https://infozip.sourceforge.net/>`_ 1327db96d56Sopenharmony_ci Information about the Info-ZIP project's ZIP archive programs and development 1337db96d56Sopenharmony_ci libraries. 1347db96d56Sopenharmony_ci 1357db96d56Sopenharmony_ci 1367db96d56Sopenharmony_ci.. _zipfile-objects: 1377db96d56Sopenharmony_ci 1387db96d56Sopenharmony_ciZipFile Objects 1397db96d56Sopenharmony_ci--------------- 1407db96d56Sopenharmony_ci 1417db96d56Sopenharmony_ci 1427db96d56Sopenharmony_ci.. class:: ZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True, \ 1437db96d56Sopenharmony_ci compresslevel=None, *, strict_timestamps=True, \ 1447db96d56Sopenharmony_ci metadata_encoding=None) 1457db96d56Sopenharmony_ci 1467db96d56Sopenharmony_ci Open a ZIP file, where *file* can be a path to a file (a string), a 1477db96d56Sopenharmony_ci file-like object or a :term:`path-like object`. 1487db96d56Sopenharmony_ci 1497db96d56Sopenharmony_ci The *mode* parameter should be ``'r'`` to read an existing 1507db96d56Sopenharmony_ci file, ``'w'`` to truncate and write a new file, ``'a'`` to append to an 1517db96d56Sopenharmony_ci existing file, or ``'x'`` to exclusively create and write a new file. 1527db96d56Sopenharmony_ci If *mode* is ``'x'`` and *file* refers to an existing file, 1537db96d56Sopenharmony_ci a :exc:`FileExistsError` will be raised. 1547db96d56Sopenharmony_ci If *mode* is ``'a'`` and *file* refers to an existing ZIP 1557db96d56Sopenharmony_ci file, then additional files are added to it. If *file* does not refer to a 1567db96d56Sopenharmony_ci ZIP file, then a new ZIP archive is appended to the file. This is meant for 1577db96d56Sopenharmony_ci adding a ZIP archive to another file (such as :file:`python.exe`). If 1587db96d56Sopenharmony_ci *mode* is ``'a'`` and the file does not exist at all, it is created. 1597db96d56Sopenharmony_ci If *mode* is ``'r'`` or ``'a'``, the file should be seekable. 1607db96d56Sopenharmony_ci 1617db96d56Sopenharmony_ci *compression* is the ZIP compression method to use when writing the archive, 1627db96d56Sopenharmony_ci and should be :const:`ZIP_STORED`, :const:`ZIP_DEFLATED`, 1637db96d56Sopenharmony_ci :const:`ZIP_BZIP2` or :const:`ZIP_LZMA`; unrecognized 1647db96d56Sopenharmony_ci values will cause :exc:`NotImplementedError` to be raised. If 1657db96d56Sopenharmony_ci :const:`ZIP_DEFLATED`, :const:`ZIP_BZIP2` or :const:`ZIP_LZMA` is specified 1667db96d56Sopenharmony_ci but the corresponding module (:mod:`zlib`, :mod:`bz2` or :mod:`lzma`) is not 1677db96d56Sopenharmony_ci available, :exc:`RuntimeError` is raised. The default is :const:`ZIP_STORED`. 1687db96d56Sopenharmony_ci 1697db96d56Sopenharmony_ci If *allowZip64* is ``True`` (the default) zipfile will create ZIP files that 1707db96d56Sopenharmony_ci use the ZIP64 extensions when the zipfile is larger than 4 GiB. If it is 1717db96d56Sopenharmony_ci ``false`` :mod:`zipfile` will raise an exception when the ZIP file would 1727db96d56Sopenharmony_ci require ZIP64 extensions. 1737db96d56Sopenharmony_ci 1747db96d56Sopenharmony_ci The *compresslevel* parameter controls the compression level to use when 1757db96d56Sopenharmony_ci writing files to the archive. 1767db96d56Sopenharmony_ci When using :const:`ZIP_STORED` or :const:`ZIP_LZMA` it has no effect. 1777db96d56Sopenharmony_ci When using :const:`ZIP_DEFLATED` integers ``0`` through ``9`` are accepted 1787db96d56Sopenharmony_ci (see :class:`zlib <zlib.compressobj>` for more information). 1797db96d56Sopenharmony_ci When using :const:`ZIP_BZIP2` integers ``1`` through ``9`` are accepted 1807db96d56Sopenharmony_ci (see :class:`bz2 <bz2.BZ2File>` for more information). 1817db96d56Sopenharmony_ci 1827db96d56Sopenharmony_ci The *strict_timestamps* argument, when set to ``False``, allows to 1837db96d56Sopenharmony_ci zip files older than 1980-01-01 at the cost of setting the 1847db96d56Sopenharmony_ci timestamp to 1980-01-01. 1857db96d56Sopenharmony_ci Similar behavior occurs with files newer than 2107-12-31, 1867db96d56Sopenharmony_ci the timestamp is also set to the limit. 1877db96d56Sopenharmony_ci 1887db96d56Sopenharmony_ci When mode is ``'r'``, *metadata_encoding* may be set to the name of a codec, 1897db96d56Sopenharmony_ci which will be used to decode metadata such as the names of members and ZIP 1907db96d56Sopenharmony_ci comments. 1917db96d56Sopenharmony_ci 1927db96d56Sopenharmony_ci If the file is created with mode ``'w'``, ``'x'`` or ``'a'`` and then 1937db96d56Sopenharmony_ci :meth:`closed <close>` without adding any files to the archive, the appropriate 1947db96d56Sopenharmony_ci ZIP structures for an empty archive will be written to the file. 1957db96d56Sopenharmony_ci 1967db96d56Sopenharmony_ci ZipFile is also a context manager and therefore supports the 1977db96d56Sopenharmony_ci :keyword:`with` statement. In the example, *myzip* is closed after the 1987db96d56Sopenharmony_ci :keyword:`!with` statement's suite is finished---even if an exception occurs:: 1997db96d56Sopenharmony_ci 2007db96d56Sopenharmony_ci with ZipFile('spam.zip', 'w') as myzip: 2017db96d56Sopenharmony_ci myzip.write('eggs.txt') 2027db96d56Sopenharmony_ci 2037db96d56Sopenharmony_ci .. note:: 2047db96d56Sopenharmony_ci 2057db96d56Sopenharmony_ci *metadata_encoding* is an instance-wide setting for the ZipFile. 2067db96d56Sopenharmony_ci It is not currently possible to set this on a per-member basis. 2077db96d56Sopenharmony_ci 2087db96d56Sopenharmony_ci This attribute is a workaround for legacy implementations which produce 2097db96d56Sopenharmony_ci archives with names in the current locale encoding or code page (mostly 2107db96d56Sopenharmony_ci on Windows). According to the .ZIP standard, the encoding of metadata 2117db96d56Sopenharmony_ci may be specified to be either IBM code page (default) or UTF-8 by a flag 2127db96d56Sopenharmony_ci in the archive header. 2137db96d56Sopenharmony_ci That flag takes precedence over *metadata_encoding*, which is 2147db96d56Sopenharmony_ci a Python-specific extension. 2157db96d56Sopenharmony_ci 2167db96d56Sopenharmony_ci .. versionadded:: 3.2 2177db96d56Sopenharmony_ci Added the ability to use :class:`ZipFile` as a context manager. 2187db96d56Sopenharmony_ci 2197db96d56Sopenharmony_ci .. versionchanged:: 3.3 2207db96d56Sopenharmony_ci Added support for :mod:`bzip2 <bz2>` and :mod:`lzma` compression. 2217db96d56Sopenharmony_ci 2227db96d56Sopenharmony_ci .. versionchanged:: 3.4 2237db96d56Sopenharmony_ci ZIP64 extensions are enabled by default. 2247db96d56Sopenharmony_ci 2257db96d56Sopenharmony_ci .. versionchanged:: 3.5 2267db96d56Sopenharmony_ci Added support for writing to unseekable streams. 2277db96d56Sopenharmony_ci Added support for the ``'x'`` mode. 2287db96d56Sopenharmony_ci 2297db96d56Sopenharmony_ci .. versionchanged:: 3.6 2307db96d56Sopenharmony_ci Previously, a plain :exc:`RuntimeError` was raised for unrecognized 2317db96d56Sopenharmony_ci compression values. 2327db96d56Sopenharmony_ci 2337db96d56Sopenharmony_ci .. versionchanged:: 3.6.2 2347db96d56Sopenharmony_ci The *file* parameter accepts a :term:`path-like object`. 2357db96d56Sopenharmony_ci 2367db96d56Sopenharmony_ci .. versionchanged:: 3.7 2377db96d56Sopenharmony_ci Add the *compresslevel* parameter. 2387db96d56Sopenharmony_ci 2397db96d56Sopenharmony_ci .. versionadded:: 3.8 2407db96d56Sopenharmony_ci The *strict_timestamps* keyword-only argument 2417db96d56Sopenharmony_ci 2427db96d56Sopenharmony_ci .. versionchanged:: 3.11 2437db96d56Sopenharmony_ci Added support for specifying member name encoding for reading 2447db96d56Sopenharmony_ci metadata in the zipfile's directory and file headers. 2457db96d56Sopenharmony_ci 2467db96d56Sopenharmony_ci 2477db96d56Sopenharmony_ci.. method:: ZipFile.close() 2487db96d56Sopenharmony_ci 2497db96d56Sopenharmony_ci Close the archive file. You must call :meth:`close` before exiting your program 2507db96d56Sopenharmony_ci or essential records will not be written. 2517db96d56Sopenharmony_ci 2527db96d56Sopenharmony_ci 2537db96d56Sopenharmony_ci.. method:: ZipFile.getinfo(name) 2547db96d56Sopenharmony_ci 2557db96d56Sopenharmony_ci Return a :class:`ZipInfo` object with information about the archive member 2567db96d56Sopenharmony_ci *name*. Calling :meth:`getinfo` for a name not currently contained in the 2577db96d56Sopenharmony_ci archive will raise a :exc:`KeyError`. 2587db96d56Sopenharmony_ci 2597db96d56Sopenharmony_ci 2607db96d56Sopenharmony_ci.. method:: ZipFile.infolist() 2617db96d56Sopenharmony_ci 2627db96d56Sopenharmony_ci Return a list containing a :class:`ZipInfo` object for each member of the 2637db96d56Sopenharmony_ci archive. The objects are in the same order as their entries in the actual ZIP 2647db96d56Sopenharmony_ci file on disk if an existing archive was opened. 2657db96d56Sopenharmony_ci 2667db96d56Sopenharmony_ci 2677db96d56Sopenharmony_ci.. method:: ZipFile.namelist() 2687db96d56Sopenharmony_ci 2697db96d56Sopenharmony_ci Return a list of archive members by name. 2707db96d56Sopenharmony_ci 2717db96d56Sopenharmony_ci 2727db96d56Sopenharmony_ci.. method:: ZipFile.open(name, mode='r', pwd=None, *, force_zip64=False) 2737db96d56Sopenharmony_ci 2747db96d56Sopenharmony_ci Access a member of the archive as a binary file-like object. *name* 2757db96d56Sopenharmony_ci can be either the name of a file within the archive or a :class:`ZipInfo` 2767db96d56Sopenharmony_ci object. The *mode* parameter, if included, must be ``'r'`` (the default) 2777db96d56Sopenharmony_ci or ``'w'``. *pwd* is the password used to decrypt encrypted ZIP files as a 2787db96d56Sopenharmony_ci :class:`bytes` object. 2797db96d56Sopenharmony_ci 2807db96d56Sopenharmony_ci :meth:`~ZipFile.open` is also a context manager and therefore supports the 2817db96d56Sopenharmony_ci :keyword:`with` statement:: 2827db96d56Sopenharmony_ci 2837db96d56Sopenharmony_ci with ZipFile('spam.zip') as myzip: 2847db96d56Sopenharmony_ci with myzip.open('eggs.txt') as myfile: 2857db96d56Sopenharmony_ci print(myfile.read()) 2867db96d56Sopenharmony_ci 2877db96d56Sopenharmony_ci With *mode* ``'r'`` the file-like object 2887db96d56Sopenharmony_ci (``ZipExtFile``) is read-only and provides the following methods: 2897db96d56Sopenharmony_ci :meth:`~io.BufferedIOBase.read`, :meth:`~io.IOBase.readline`, 2907db96d56Sopenharmony_ci :meth:`~io.IOBase.readlines`, :meth:`~io.IOBase.seek`, 2917db96d56Sopenharmony_ci :meth:`~io.IOBase.tell`, :meth:`~container.__iter__`, :meth:`~iterator.__next__`. 2927db96d56Sopenharmony_ci These objects can operate independently of the ZipFile. 2937db96d56Sopenharmony_ci 2947db96d56Sopenharmony_ci With ``mode='w'``, a writable file handle is returned, which supports the 2957db96d56Sopenharmony_ci :meth:`~io.BufferedIOBase.write` method. While a writable file handle is open, 2967db96d56Sopenharmony_ci attempting to read or write other files in the ZIP file will raise a 2977db96d56Sopenharmony_ci :exc:`ValueError`. 2987db96d56Sopenharmony_ci 2997db96d56Sopenharmony_ci When writing a file, if the file size is not known in advance but may exceed 3007db96d56Sopenharmony_ci 2 GiB, pass ``force_zip64=True`` to ensure that the header format is 3017db96d56Sopenharmony_ci capable of supporting large files. If the file size is known in advance, 3027db96d56Sopenharmony_ci construct a :class:`ZipInfo` object with :attr:`~ZipInfo.file_size` set, and 3037db96d56Sopenharmony_ci use that as the *name* parameter. 3047db96d56Sopenharmony_ci 3057db96d56Sopenharmony_ci .. note:: 3067db96d56Sopenharmony_ci 3077db96d56Sopenharmony_ci The :meth:`.open`, :meth:`read` and :meth:`extract` methods can take a filename 3087db96d56Sopenharmony_ci or a :class:`ZipInfo` object. You will appreciate this when trying to read a 3097db96d56Sopenharmony_ci ZIP file that contains members with duplicate names. 3107db96d56Sopenharmony_ci 3117db96d56Sopenharmony_ci .. versionchanged:: 3.6 3127db96d56Sopenharmony_ci Removed support of ``mode='U'``. Use :class:`io.TextIOWrapper` for reading 3137db96d56Sopenharmony_ci compressed text files in :term:`universal newlines` mode. 3147db96d56Sopenharmony_ci 3157db96d56Sopenharmony_ci .. versionchanged:: 3.6 3167db96d56Sopenharmony_ci :meth:`ZipFile.open` can now be used to write files into the archive with the 3177db96d56Sopenharmony_ci ``mode='w'`` option. 3187db96d56Sopenharmony_ci 3197db96d56Sopenharmony_ci .. versionchanged:: 3.6 3207db96d56Sopenharmony_ci Calling :meth:`.open` on a closed ZipFile will raise a :exc:`ValueError`. 3217db96d56Sopenharmony_ci Previously, a :exc:`RuntimeError` was raised. 3227db96d56Sopenharmony_ci 3237db96d56Sopenharmony_ci 3247db96d56Sopenharmony_ci.. method:: ZipFile.extract(member, path=None, pwd=None) 3257db96d56Sopenharmony_ci 3267db96d56Sopenharmony_ci Extract a member from the archive to the current working directory; *member* 3277db96d56Sopenharmony_ci must be its full name or a :class:`ZipInfo` object. Its file information is 3287db96d56Sopenharmony_ci extracted as accurately as possible. *path* specifies a different directory 3297db96d56Sopenharmony_ci to extract to. *member* can be a filename or a :class:`ZipInfo` object. 3307db96d56Sopenharmony_ci *pwd* is the password used for encrypted files as a :class:`bytes` object. 3317db96d56Sopenharmony_ci 3327db96d56Sopenharmony_ci Returns the normalized path created (a directory or new file). 3337db96d56Sopenharmony_ci 3347db96d56Sopenharmony_ci .. note:: 3357db96d56Sopenharmony_ci 3367db96d56Sopenharmony_ci If a member filename is an absolute path, a drive/UNC sharepoint and 3377db96d56Sopenharmony_ci leading (back)slashes will be stripped, e.g.: ``///foo/bar`` becomes 3387db96d56Sopenharmony_ci ``foo/bar`` on Unix, and ``C:\foo\bar`` becomes ``foo\bar`` on Windows. 3397db96d56Sopenharmony_ci And all ``".."`` components in a member filename will be removed, e.g.: 3407db96d56Sopenharmony_ci ``../../foo../../ba..r`` becomes ``foo../ba..r``. On Windows illegal 3417db96d56Sopenharmony_ci characters (``:``, ``<``, ``>``, ``|``, ``"``, ``?``, and ``*``) 3427db96d56Sopenharmony_ci replaced by underscore (``_``). 3437db96d56Sopenharmony_ci 3447db96d56Sopenharmony_ci .. versionchanged:: 3.6 3457db96d56Sopenharmony_ci Calling :meth:`extract` on a closed ZipFile will raise a 3467db96d56Sopenharmony_ci :exc:`ValueError`. Previously, a :exc:`RuntimeError` was raised. 3477db96d56Sopenharmony_ci 3487db96d56Sopenharmony_ci .. versionchanged:: 3.6.2 3497db96d56Sopenharmony_ci The *path* parameter accepts a :term:`path-like object`. 3507db96d56Sopenharmony_ci 3517db96d56Sopenharmony_ci 3527db96d56Sopenharmony_ci.. method:: ZipFile.extractall(path=None, members=None, pwd=None) 3537db96d56Sopenharmony_ci 3547db96d56Sopenharmony_ci Extract all members from the archive to the current working directory. *path* 3557db96d56Sopenharmony_ci specifies a different directory to extract to. *members* is optional and must 3567db96d56Sopenharmony_ci be a subset of the list returned by :meth:`namelist`. *pwd* is the password 3577db96d56Sopenharmony_ci used for encrypted files as a :class:`bytes` object. 3587db96d56Sopenharmony_ci 3597db96d56Sopenharmony_ci .. warning:: 3607db96d56Sopenharmony_ci 3617db96d56Sopenharmony_ci Never extract archives from untrusted sources without prior inspection. 3627db96d56Sopenharmony_ci It is possible that files are created outside of *path*, e.g. members 3637db96d56Sopenharmony_ci that have absolute filenames starting with ``"/"`` or filenames with two 3647db96d56Sopenharmony_ci dots ``".."``. This module attempts to prevent that. 3657db96d56Sopenharmony_ci See :meth:`extract` note. 3667db96d56Sopenharmony_ci 3677db96d56Sopenharmony_ci .. versionchanged:: 3.6 3687db96d56Sopenharmony_ci Calling :meth:`extractall` on a closed ZipFile will raise a 3697db96d56Sopenharmony_ci :exc:`ValueError`. Previously, a :exc:`RuntimeError` was raised. 3707db96d56Sopenharmony_ci 3717db96d56Sopenharmony_ci .. versionchanged:: 3.6.2 3727db96d56Sopenharmony_ci The *path* parameter accepts a :term:`path-like object`. 3737db96d56Sopenharmony_ci 3747db96d56Sopenharmony_ci 3757db96d56Sopenharmony_ci.. method:: ZipFile.printdir() 3767db96d56Sopenharmony_ci 3777db96d56Sopenharmony_ci Print a table of contents for the archive to ``sys.stdout``. 3787db96d56Sopenharmony_ci 3797db96d56Sopenharmony_ci 3807db96d56Sopenharmony_ci.. method:: ZipFile.setpassword(pwd) 3817db96d56Sopenharmony_ci 3827db96d56Sopenharmony_ci Set *pwd* (a :class:`bytes` object) as default password to extract encrypted files. 3837db96d56Sopenharmony_ci 3847db96d56Sopenharmony_ci 3857db96d56Sopenharmony_ci.. method:: ZipFile.read(name, pwd=None) 3867db96d56Sopenharmony_ci 3877db96d56Sopenharmony_ci Return the bytes of the file *name* in the archive. *name* is the name of the 3887db96d56Sopenharmony_ci file in the archive, or a :class:`ZipInfo` object. The archive must be open for 3897db96d56Sopenharmony_ci read or append. *pwd* is the password used for encrypted files as a :class:`bytes` 3907db96d56Sopenharmony_ci object and, if specified, overrides the default password set with :meth:`setpassword`. 3917db96d56Sopenharmony_ci Calling :meth:`read` on a ZipFile that uses a compression method other than 3927db96d56Sopenharmony_ci :const:`ZIP_STORED`, :const:`ZIP_DEFLATED`, :const:`ZIP_BZIP2` or 3937db96d56Sopenharmony_ci :const:`ZIP_LZMA` will raise a :exc:`NotImplementedError`. An error will also 3947db96d56Sopenharmony_ci be raised if the corresponding compression module is not available. 3957db96d56Sopenharmony_ci 3967db96d56Sopenharmony_ci .. versionchanged:: 3.6 3977db96d56Sopenharmony_ci Calling :meth:`read` on a closed ZipFile will raise a :exc:`ValueError`. 3987db96d56Sopenharmony_ci Previously, a :exc:`RuntimeError` was raised. 3997db96d56Sopenharmony_ci 4007db96d56Sopenharmony_ci 4017db96d56Sopenharmony_ci.. method:: ZipFile.testzip() 4027db96d56Sopenharmony_ci 4037db96d56Sopenharmony_ci Read all the files in the archive and check their CRC's and file headers. 4047db96d56Sopenharmony_ci Return the name of the first bad file, or else return ``None``. 4057db96d56Sopenharmony_ci 4067db96d56Sopenharmony_ci .. versionchanged:: 3.6 4077db96d56Sopenharmony_ci Calling :meth:`testzip` on a closed ZipFile will raise a 4087db96d56Sopenharmony_ci :exc:`ValueError`. Previously, a :exc:`RuntimeError` was raised. 4097db96d56Sopenharmony_ci 4107db96d56Sopenharmony_ci 4117db96d56Sopenharmony_ci.. method:: ZipFile.write(filename, arcname=None, compress_type=None, \ 4127db96d56Sopenharmony_ci compresslevel=None) 4137db96d56Sopenharmony_ci 4147db96d56Sopenharmony_ci Write the file named *filename* to the archive, giving it the archive name 4157db96d56Sopenharmony_ci *arcname* (by default, this will be the same as *filename*, but without a drive 4167db96d56Sopenharmony_ci letter and with leading path separators removed). If given, *compress_type* 4177db96d56Sopenharmony_ci overrides the value given for the *compression* parameter to the constructor for 4187db96d56Sopenharmony_ci the new entry. Similarly, *compresslevel* will override the constructor if 4197db96d56Sopenharmony_ci given. 4207db96d56Sopenharmony_ci The archive must be open with mode ``'w'``, ``'x'`` or ``'a'``. 4217db96d56Sopenharmony_ci 4227db96d56Sopenharmony_ci .. note:: 4237db96d56Sopenharmony_ci 4247db96d56Sopenharmony_ci The ZIP file standard historically did not specify a metadata encoding, 4257db96d56Sopenharmony_ci but strongly recommended CP437 (the original IBM PC encoding) for 4267db96d56Sopenharmony_ci interoperability. Recent versions allow use of UTF-8 (only). In this 4277db96d56Sopenharmony_ci module, UTF-8 will automatically be used to write the member names if 4287db96d56Sopenharmony_ci they contain any non-ASCII characters. It is not possible to write 4297db96d56Sopenharmony_ci member names in any encoding other than ASCII or UTF-8. 4307db96d56Sopenharmony_ci 4317db96d56Sopenharmony_ci .. note:: 4327db96d56Sopenharmony_ci 4337db96d56Sopenharmony_ci Archive names should be relative to the archive root, that is, they should not 4347db96d56Sopenharmony_ci start with a path separator. 4357db96d56Sopenharmony_ci 4367db96d56Sopenharmony_ci .. note:: 4377db96d56Sopenharmony_ci 4387db96d56Sopenharmony_ci If ``arcname`` (or ``filename``, if ``arcname`` is not given) contains a null 4397db96d56Sopenharmony_ci byte, the name of the file in the archive will be truncated at the null byte. 4407db96d56Sopenharmony_ci 4417db96d56Sopenharmony_ci .. note:: 4427db96d56Sopenharmony_ci 4437db96d56Sopenharmony_ci A leading slash in the filename may lead to the archive being impossible to 4447db96d56Sopenharmony_ci open in some zip programs on Windows systems. 4457db96d56Sopenharmony_ci 4467db96d56Sopenharmony_ci .. versionchanged:: 3.6 4477db96d56Sopenharmony_ci Calling :meth:`write` on a ZipFile created with mode ``'r'`` or 4487db96d56Sopenharmony_ci a closed ZipFile will raise a :exc:`ValueError`. Previously, 4497db96d56Sopenharmony_ci a :exc:`RuntimeError` was raised. 4507db96d56Sopenharmony_ci 4517db96d56Sopenharmony_ci 4527db96d56Sopenharmony_ci.. method:: ZipFile.writestr(zinfo_or_arcname, data, compress_type=None, \ 4537db96d56Sopenharmony_ci compresslevel=None) 4547db96d56Sopenharmony_ci 4557db96d56Sopenharmony_ci Write a file into the archive. The contents is *data*, which may be either 4567db96d56Sopenharmony_ci a :class:`str` or a :class:`bytes` instance; if it is a :class:`str`, 4577db96d56Sopenharmony_ci it is encoded as UTF-8 first. *zinfo_or_arcname* is either the file 4587db96d56Sopenharmony_ci name it will be given in the archive, or a :class:`ZipInfo` instance. If it's 4597db96d56Sopenharmony_ci an instance, at least the filename, date, and time must be given. If it's a 4607db96d56Sopenharmony_ci name, the date and time is set to the current date and time. 4617db96d56Sopenharmony_ci The archive must be opened with mode ``'w'``, ``'x'`` or ``'a'``. 4627db96d56Sopenharmony_ci 4637db96d56Sopenharmony_ci If given, *compress_type* overrides the value given for the *compression* 4647db96d56Sopenharmony_ci parameter to the constructor for the new entry, or in the *zinfo_or_arcname* 4657db96d56Sopenharmony_ci (if that is a :class:`ZipInfo` instance). Similarly, *compresslevel* will 4667db96d56Sopenharmony_ci override the constructor if given. 4677db96d56Sopenharmony_ci 4687db96d56Sopenharmony_ci .. note:: 4697db96d56Sopenharmony_ci 4707db96d56Sopenharmony_ci When passing a :class:`ZipInfo` instance as the *zinfo_or_arcname* parameter, 4717db96d56Sopenharmony_ci the compression method used will be that specified in the *compress_type* 4727db96d56Sopenharmony_ci member of the given :class:`ZipInfo` instance. By default, the 4737db96d56Sopenharmony_ci :class:`ZipInfo` constructor sets this member to :const:`ZIP_STORED`. 4747db96d56Sopenharmony_ci 4757db96d56Sopenharmony_ci .. versionchanged:: 3.2 4767db96d56Sopenharmony_ci The *compress_type* argument. 4777db96d56Sopenharmony_ci 4787db96d56Sopenharmony_ci .. versionchanged:: 3.6 4797db96d56Sopenharmony_ci Calling :meth:`writestr` on a ZipFile created with mode ``'r'`` or 4807db96d56Sopenharmony_ci a closed ZipFile will raise a :exc:`ValueError`. Previously, 4817db96d56Sopenharmony_ci a :exc:`RuntimeError` was raised. 4827db96d56Sopenharmony_ci 4837db96d56Sopenharmony_ci.. method:: ZipFile.mkdir(zinfo_or_directory, mode=511) 4847db96d56Sopenharmony_ci 4857db96d56Sopenharmony_ci Create a directory inside the archive. If *zinfo_or_directory* is a string, 4867db96d56Sopenharmony_ci a directory is created inside the archive with the mode that is specified in 4877db96d56Sopenharmony_ci the *mode* argument. If, however, *zinfo_or_directory* is 4887db96d56Sopenharmony_ci a :class:`ZipInfo` instance then the *mode* argument is ignored. 4897db96d56Sopenharmony_ci 4907db96d56Sopenharmony_ci The archive must be opened with mode ``'w'``, ``'x'`` or ``'a'``. 4917db96d56Sopenharmony_ci 4927db96d56Sopenharmony_ci .. versionadded:: 3.11 4937db96d56Sopenharmony_ci 4947db96d56Sopenharmony_ci 4957db96d56Sopenharmony_ciThe following data attributes are also available: 4967db96d56Sopenharmony_ci 4977db96d56Sopenharmony_ci.. attribute:: ZipFile.filename 4987db96d56Sopenharmony_ci 4997db96d56Sopenharmony_ci Name of the ZIP file. 5007db96d56Sopenharmony_ci 5017db96d56Sopenharmony_ci.. attribute:: ZipFile.debug 5027db96d56Sopenharmony_ci 5037db96d56Sopenharmony_ci The level of debug output to use. This may be set from ``0`` (the default, no 5047db96d56Sopenharmony_ci output) to ``3`` (the most output). Debugging information is written to 5057db96d56Sopenharmony_ci ``sys.stdout``. 5067db96d56Sopenharmony_ci 5077db96d56Sopenharmony_ci.. attribute:: ZipFile.comment 5087db96d56Sopenharmony_ci 5097db96d56Sopenharmony_ci The comment associated with the ZIP file as a :class:`bytes` object. 5107db96d56Sopenharmony_ci If assigning a comment to a 5117db96d56Sopenharmony_ci :class:`ZipFile` instance created with mode ``'w'``, ``'x'`` or ``'a'``, 5127db96d56Sopenharmony_ci it should be no longer than 65535 bytes. Comments longer than this will be 5137db96d56Sopenharmony_ci truncated. 5147db96d56Sopenharmony_ci 5157db96d56Sopenharmony_ci 5167db96d56Sopenharmony_ci.. _path-objects: 5177db96d56Sopenharmony_ci 5187db96d56Sopenharmony_ciPath Objects 5197db96d56Sopenharmony_ci------------ 5207db96d56Sopenharmony_ci 5217db96d56Sopenharmony_ci.. class:: Path(root, at='') 5227db96d56Sopenharmony_ci 5237db96d56Sopenharmony_ci Construct a Path object from a ``root`` zipfile (which may be a 5247db96d56Sopenharmony_ci :class:`ZipFile` instance or ``file`` suitable for passing to 5257db96d56Sopenharmony_ci the :class:`ZipFile` constructor). 5267db96d56Sopenharmony_ci 5277db96d56Sopenharmony_ci ``at`` specifies the location of this Path within the zipfile, 5287db96d56Sopenharmony_ci e.g. 'dir/file.txt', 'dir/', or ''. Defaults to the empty string, 5297db96d56Sopenharmony_ci indicating the root. 5307db96d56Sopenharmony_ci 5317db96d56Sopenharmony_ciPath objects expose the following features of :mod:`pathlib.Path` 5327db96d56Sopenharmony_ciobjects: 5337db96d56Sopenharmony_ci 5347db96d56Sopenharmony_ciPath objects are traversable using the ``/`` operator or ``joinpath``. 5357db96d56Sopenharmony_ci 5367db96d56Sopenharmony_ci.. attribute:: Path.name 5377db96d56Sopenharmony_ci 5387db96d56Sopenharmony_ci The final path component. 5397db96d56Sopenharmony_ci 5407db96d56Sopenharmony_ci.. method:: Path.open(mode='r', *, pwd, **) 5417db96d56Sopenharmony_ci 5427db96d56Sopenharmony_ci Invoke :meth:`ZipFile.open` on the current path. 5437db96d56Sopenharmony_ci Allows opening for read or write, text or binary 5447db96d56Sopenharmony_ci through supported modes: 'r', 'w', 'rb', 'wb'. 5457db96d56Sopenharmony_ci Positional and keyword arguments are passed through to 5467db96d56Sopenharmony_ci :class:`io.TextIOWrapper` when opened as text and 5477db96d56Sopenharmony_ci ignored otherwise. 5487db96d56Sopenharmony_ci ``pwd`` is the ``pwd`` parameter to 5497db96d56Sopenharmony_ci :meth:`ZipFile.open`. 5507db96d56Sopenharmony_ci 5517db96d56Sopenharmony_ci .. versionchanged:: 3.9 5527db96d56Sopenharmony_ci Added support for text and binary modes for open. Default 5537db96d56Sopenharmony_ci mode is now text. 5547db96d56Sopenharmony_ci 5557db96d56Sopenharmony_ci .. versionchanged:: 3.11.2 5567db96d56Sopenharmony_ci The ``encoding`` parameter can be supplied as a positional argument 5577db96d56Sopenharmony_ci without causing a :exc:`TypeError`. As it could in 3.9. Code needing to 5587db96d56Sopenharmony_ci be compatible with unpatched 3.10 and 3.11 versions must pass all 5597db96d56Sopenharmony_ci :class:`io.TextIOWrapper` arguments, ``encoding`` included, as keywords. 5607db96d56Sopenharmony_ci 5617db96d56Sopenharmony_ci.. method:: Path.iterdir() 5627db96d56Sopenharmony_ci 5637db96d56Sopenharmony_ci Enumerate the children of the current directory. 5647db96d56Sopenharmony_ci 5657db96d56Sopenharmony_ci.. method:: Path.is_dir() 5667db96d56Sopenharmony_ci 5677db96d56Sopenharmony_ci Return ``True`` if the current context references a directory. 5687db96d56Sopenharmony_ci 5697db96d56Sopenharmony_ci.. method:: Path.is_file() 5707db96d56Sopenharmony_ci 5717db96d56Sopenharmony_ci Return ``True`` if the current context references a file. 5727db96d56Sopenharmony_ci 5737db96d56Sopenharmony_ci.. method:: Path.exists() 5747db96d56Sopenharmony_ci 5757db96d56Sopenharmony_ci Return ``True`` if the current context references a file or 5767db96d56Sopenharmony_ci directory in the zip file. 5777db96d56Sopenharmony_ci 5787db96d56Sopenharmony_ci.. data:: Path.suffix 5797db96d56Sopenharmony_ci 5807db96d56Sopenharmony_ci The file extension of the final component. 5817db96d56Sopenharmony_ci 5827db96d56Sopenharmony_ci .. versionadded:: 3.11 5837db96d56Sopenharmony_ci Added :data:`Path.suffix` property. 5847db96d56Sopenharmony_ci 5857db96d56Sopenharmony_ci.. data:: Path.stem 5867db96d56Sopenharmony_ci 5877db96d56Sopenharmony_ci The final path component, without its suffix. 5887db96d56Sopenharmony_ci 5897db96d56Sopenharmony_ci .. versionadded:: 3.11 5907db96d56Sopenharmony_ci Added :data:`Path.stem` property. 5917db96d56Sopenharmony_ci 5927db96d56Sopenharmony_ci.. data:: Path.suffixes 5937db96d56Sopenharmony_ci 5947db96d56Sopenharmony_ci A list of the path’s file extensions. 5957db96d56Sopenharmony_ci 5967db96d56Sopenharmony_ci .. versionadded:: 3.11 5977db96d56Sopenharmony_ci Added :data:`Path.suffixes` property. 5987db96d56Sopenharmony_ci 5997db96d56Sopenharmony_ci.. method:: Path.read_text(*, **) 6007db96d56Sopenharmony_ci 6017db96d56Sopenharmony_ci Read the current file as unicode text. Positional and 6027db96d56Sopenharmony_ci keyword arguments are passed through to 6037db96d56Sopenharmony_ci :class:`io.TextIOWrapper` (except ``buffer``, which is 6047db96d56Sopenharmony_ci implied by the context). 6057db96d56Sopenharmony_ci 6067db96d56Sopenharmony_ci .. versionchanged:: 3.11.2 6077db96d56Sopenharmony_ci The ``encoding`` parameter can be supplied as a positional argument 6087db96d56Sopenharmony_ci without causing a :exc:`TypeError`. As it could in 3.9. Code needing to 6097db96d56Sopenharmony_ci be compatible with unpatched 3.10 and 3.11 versions must pass all 6107db96d56Sopenharmony_ci :class:`io.TextIOWrapper` arguments, ``encoding`` included, as keywords. 6117db96d56Sopenharmony_ci 6127db96d56Sopenharmony_ci.. method:: Path.read_bytes() 6137db96d56Sopenharmony_ci 6147db96d56Sopenharmony_ci Read the current file as bytes. 6157db96d56Sopenharmony_ci 6167db96d56Sopenharmony_ci.. method:: Path.joinpath(*other) 6177db96d56Sopenharmony_ci 6187db96d56Sopenharmony_ci Return a new Path object with each of the *other* arguments 6197db96d56Sopenharmony_ci joined. The following are equivalent:: 6207db96d56Sopenharmony_ci 6217db96d56Sopenharmony_ci >>> Path(...).joinpath('child').joinpath('grandchild') 6227db96d56Sopenharmony_ci >>> Path(...).joinpath('child', 'grandchild') 6237db96d56Sopenharmony_ci >>> Path(...) / 'child' / 'grandchild' 6247db96d56Sopenharmony_ci 6257db96d56Sopenharmony_ci .. versionchanged:: 3.10 6267db96d56Sopenharmony_ci Prior to 3.10, ``joinpath`` was undocumented and accepted 6277db96d56Sopenharmony_ci exactly one parameter. 6287db96d56Sopenharmony_ci 6297db96d56Sopenharmony_ciThe `zipp <https://pypi.org/project/zipp>`_ project provides backports 6307db96d56Sopenharmony_ciof the latest path object functionality to older Pythons. Use 6317db96d56Sopenharmony_ci``zipp.Path`` in place of ``zipfile.Path`` for early access to 6327db96d56Sopenharmony_cichanges. 6337db96d56Sopenharmony_ci 6347db96d56Sopenharmony_ci.. _pyzipfile-objects: 6357db96d56Sopenharmony_ci 6367db96d56Sopenharmony_ciPyZipFile Objects 6377db96d56Sopenharmony_ci----------------- 6387db96d56Sopenharmony_ci 6397db96d56Sopenharmony_ciThe :class:`PyZipFile` constructor takes the same parameters as the 6407db96d56Sopenharmony_ci:class:`ZipFile` constructor, and one additional parameter, *optimize*. 6417db96d56Sopenharmony_ci 6427db96d56Sopenharmony_ci.. class:: PyZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True, \ 6437db96d56Sopenharmony_ci optimize=-1) 6447db96d56Sopenharmony_ci 6457db96d56Sopenharmony_ci .. versionadded:: 3.2 6467db96d56Sopenharmony_ci The *optimize* parameter. 6477db96d56Sopenharmony_ci 6487db96d56Sopenharmony_ci .. versionchanged:: 3.4 6497db96d56Sopenharmony_ci ZIP64 extensions are enabled by default. 6507db96d56Sopenharmony_ci 6517db96d56Sopenharmony_ci Instances have one method in addition to those of :class:`ZipFile` objects: 6527db96d56Sopenharmony_ci 6537db96d56Sopenharmony_ci .. method:: PyZipFile.writepy(pathname, basename='', filterfunc=None) 6547db96d56Sopenharmony_ci 6557db96d56Sopenharmony_ci Search for files :file:`\*.py` and add the corresponding file to the 6567db96d56Sopenharmony_ci archive. 6577db96d56Sopenharmony_ci 6587db96d56Sopenharmony_ci If the *optimize* parameter to :class:`PyZipFile` was not given or ``-1``, 6597db96d56Sopenharmony_ci the corresponding file is a :file:`\*.pyc` file, compiling if necessary. 6607db96d56Sopenharmony_ci 6617db96d56Sopenharmony_ci If the *optimize* parameter to :class:`PyZipFile` was ``0``, ``1`` or 6627db96d56Sopenharmony_ci ``2``, only files with that optimization level (see :func:`compile`) are 6637db96d56Sopenharmony_ci added to the archive, compiling if necessary. 6647db96d56Sopenharmony_ci 6657db96d56Sopenharmony_ci If *pathname* is a file, the filename must end with :file:`.py`, and 6667db96d56Sopenharmony_ci just the (corresponding :file:`\*.pyc`) file is added at the top level 6677db96d56Sopenharmony_ci (no path information). If *pathname* is a file that does not end with 6687db96d56Sopenharmony_ci :file:`.py`, a :exc:`RuntimeError` will be raised. If it is a directory, 6697db96d56Sopenharmony_ci and the directory is not a package directory, then all the files 6707db96d56Sopenharmony_ci :file:`\*.pyc` are added at the top level. If the directory is a 6717db96d56Sopenharmony_ci package directory, then all :file:`\*.pyc` are added under the package 6727db96d56Sopenharmony_ci name as a file path, and if any subdirectories are package directories, 6737db96d56Sopenharmony_ci all of these are added recursively in sorted order. 6747db96d56Sopenharmony_ci 6757db96d56Sopenharmony_ci *basename* is intended for internal use only. 6767db96d56Sopenharmony_ci 6777db96d56Sopenharmony_ci *filterfunc*, if given, must be a function taking a single string 6787db96d56Sopenharmony_ci argument. It will be passed each path (including each individual full 6797db96d56Sopenharmony_ci file path) before it is added to the archive. If *filterfunc* returns a 6807db96d56Sopenharmony_ci false value, the path will not be added, and if it is a directory its 6817db96d56Sopenharmony_ci contents will be ignored. For example, if our test files are all either 6827db96d56Sopenharmony_ci in ``test`` directories or start with the string ``test_``, we can use a 6837db96d56Sopenharmony_ci *filterfunc* to exclude them:: 6847db96d56Sopenharmony_ci 6857db96d56Sopenharmony_ci >>> zf = PyZipFile('myprog.zip') 6867db96d56Sopenharmony_ci >>> def notests(s): 6877db96d56Sopenharmony_ci ... fn = os.path.basename(s) 6887db96d56Sopenharmony_ci ... return (not (fn == 'test' or fn.startswith('test_'))) 6897db96d56Sopenharmony_ci >>> zf.writepy('myprog', filterfunc=notests) 6907db96d56Sopenharmony_ci 6917db96d56Sopenharmony_ci The :meth:`writepy` method makes archives with file names like 6927db96d56Sopenharmony_ci this:: 6937db96d56Sopenharmony_ci 6947db96d56Sopenharmony_ci string.pyc # Top level name 6957db96d56Sopenharmony_ci test/__init__.pyc # Package directory 6967db96d56Sopenharmony_ci test/testall.pyc # Module test.testall 6977db96d56Sopenharmony_ci test/bogus/__init__.pyc # Subpackage directory 6987db96d56Sopenharmony_ci test/bogus/myfile.pyc # Submodule test.bogus.myfile 6997db96d56Sopenharmony_ci 7007db96d56Sopenharmony_ci .. versionadded:: 3.4 7017db96d56Sopenharmony_ci The *filterfunc* parameter. 7027db96d56Sopenharmony_ci 7037db96d56Sopenharmony_ci .. versionchanged:: 3.6.2 7047db96d56Sopenharmony_ci The *pathname* parameter accepts a :term:`path-like object`. 7057db96d56Sopenharmony_ci 7067db96d56Sopenharmony_ci .. versionchanged:: 3.7 7077db96d56Sopenharmony_ci Recursion sorts directory entries. 7087db96d56Sopenharmony_ci 7097db96d56Sopenharmony_ci 7107db96d56Sopenharmony_ci.. _zipinfo-objects: 7117db96d56Sopenharmony_ci 7127db96d56Sopenharmony_ciZipInfo Objects 7137db96d56Sopenharmony_ci--------------- 7147db96d56Sopenharmony_ci 7157db96d56Sopenharmony_ciInstances of the :class:`ZipInfo` class are returned by the :meth:`.getinfo` and 7167db96d56Sopenharmony_ci:meth:`.infolist` methods of :class:`ZipFile` objects. Each object stores 7177db96d56Sopenharmony_ciinformation about a single member of the ZIP archive. 7187db96d56Sopenharmony_ci 7197db96d56Sopenharmony_ciThere is one classmethod to make a :class:`ZipInfo` instance for a filesystem 7207db96d56Sopenharmony_cifile: 7217db96d56Sopenharmony_ci 7227db96d56Sopenharmony_ci.. classmethod:: ZipInfo.from_file(filename, arcname=None, *, \ 7237db96d56Sopenharmony_ci strict_timestamps=True) 7247db96d56Sopenharmony_ci 7257db96d56Sopenharmony_ci Construct a :class:`ZipInfo` instance for a file on the filesystem, in 7267db96d56Sopenharmony_ci preparation for adding it to a zip file. 7277db96d56Sopenharmony_ci 7287db96d56Sopenharmony_ci *filename* should be the path to a file or directory on the filesystem. 7297db96d56Sopenharmony_ci 7307db96d56Sopenharmony_ci If *arcname* is specified, it is used as the name within the archive. 7317db96d56Sopenharmony_ci If *arcname* is not specified, the name will be the same as *filename*, but 7327db96d56Sopenharmony_ci with any drive letter and leading path separators removed. 7337db96d56Sopenharmony_ci 7347db96d56Sopenharmony_ci The *strict_timestamps* argument, when set to ``False``, allows to 7357db96d56Sopenharmony_ci zip files older than 1980-01-01 at the cost of setting the 7367db96d56Sopenharmony_ci timestamp to 1980-01-01. 7377db96d56Sopenharmony_ci Similar behavior occurs with files newer than 2107-12-31, 7387db96d56Sopenharmony_ci the timestamp is also set to the limit. 7397db96d56Sopenharmony_ci 7407db96d56Sopenharmony_ci .. versionadded:: 3.6 7417db96d56Sopenharmony_ci 7427db96d56Sopenharmony_ci .. versionchanged:: 3.6.2 7437db96d56Sopenharmony_ci The *filename* parameter accepts a :term:`path-like object`. 7447db96d56Sopenharmony_ci 7457db96d56Sopenharmony_ci .. versionadded:: 3.8 7467db96d56Sopenharmony_ci The *strict_timestamps* keyword-only argument 7477db96d56Sopenharmony_ci 7487db96d56Sopenharmony_ci 7497db96d56Sopenharmony_ciInstances have the following methods and attributes: 7507db96d56Sopenharmony_ci 7517db96d56Sopenharmony_ci.. method:: ZipInfo.is_dir() 7527db96d56Sopenharmony_ci 7537db96d56Sopenharmony_ci Return ``True`` if this archive member is a directory. 7547db96d56Sopenharmony_ci 7557db96d56Sopenharmony_ci This uses the entry's name: directories should always end with ``/``. 7567db96d56Sopenharmony_ci 7577db96d56Sopenharmony_ci .. versionadded:: 3.6 7587db96d56Sopenharmony_ci 7597db96d56Sopenharmony_ci 7607db96d56Sopenharmony_ci.. attribute:: ZipInfo.filename 7617db96d56Sopenharmony_ci 7627db96d56Sopenharmony_ci Name of the file in the archive. 7637db96d56Sopenharmony_ci 7647db96d56Sopenharmony_ci 7657db96d56Sopenharmony_ci.. attribute:: ZipInfo.date_time 7667db96d56Sopenharmony_ci 7677db96d56Sopenharmony_ci The time and date of the last modification to the archive member. This is a 7687db96d56Sopenharmony_ci tuple of six values: 7697db96d56Sopenharmony_ci 7707db96d56Sopenharmony_ci +-------+--------------------------+ 7717db96d56Sopenharmony_ci | Index | Value | 7727db96d56Sopenharmony_ci +=======+==========================+ 7737db96d56Sopenharmony_ci | ``0`` | Year (>= 1980) | 7747db96d56Sopenharmony_ci +-------+--------------------------+ 7757db96d56Sopenharmony_ci | ``1`` | Month (one-based) | 7767db96d56Sopenharmony_ci +-------+--------------------------+ 7777db96d56Sopenharmony_ci | ``2`` | Day of month (one-based) | 7787db96d56Sopenharmony_ci +-------+--------------------------+ 7797db96d56Sopenharmony_ci | ``3`` | Hours (zero-based) | 7807db96d56Sopenharmony_ci +-------+--------------------------+ 7817db96d56Sopenharmony_ci | ``4`` | Minutes (zero-based) | 7827db96d56Sopenharmony_ci +-------+--------------------------+ 7837db96d56Sopenharmony_ci | ``5`` | Seconds (zero-based) | 7847db96d56Sopenharmony_ci +-------+--------------------------+ 7857db96d56Sopenharmony_ci 7867db96d56Sopenharmony_ci .. note:: 7877db96d56Sopenharmony_ci 7887db96d56Sopenharmony_ci The ZIP file format does not support timestamps before 1980. 7897db96d56Sopenharmony_ci 7907db96d56Sopenharmony_ci 7917db96d56Sopenharmony_ci.. attribute:: ZipInfo.compress_type 7927db96d56Sopenharmony_ci 7937db96d56Sopenharmony_ci Type of compression for the archive member. 7947db96d56Sopenharmony_ci 7957db96d56Sopenharmony_ci 7967db96d56Sopenharmony_ci.. attribute:: ZipInfo.comment 7977db96d56Sopenharmony_ci 7987db96d56Sopenharmony_ci Comment for the individual archive member as a :class:`bytes` object. 7997db96d56Sopenharmony_ci 8007db96d56Sopenharmony_ci 8017db96d56Sopenharmony_ci.. attribute:: ZipInfo.extra 8027db96d56Sopenharmony_ci 8037db96d56Sopenharmony_ci Expansion field data. The `PKZIP Application Note`_ contains 8047db96d56Sopenharmony_ci some comments on the internal structure of the data contained in this 8057db96d56Sopenharmony_ci :class:`bytes` object. 8067db96d56Sopenharmony_ci 8077db96d56Sopenharmony_ci 8087db96d56Sopenharmony_ci.. attribute:: ZipInfo.create_system 8097db96d56Sopenharmony_ci 8107db96d56Sopenharmony_ci System which created ZIP archive. 8117db96d56Sopenharmony_ci 8127db96d56Sopenharmony_ci 8137db96d56Sopenharmony_ci.. attribute:: ZipInfo.create_version 8147db96d56Sopenharmony_ci 8157db96d56Sopenharmony_ci PKZIP version which created ZIP archive. 8167db96d56Sopenharmony_ci 8177db96d56Sopenharmony_ci 8187db96d56Sopenharmony_ci.. attribute:: ZipInfo.extract_version 8197db96d56Sopenharmony_ci 8207db96d56Sopenharmony_ci PKZIP version needed to extract archive. 8217db96d56Sopenharmony_ci 8227db96d56Sopenharmony_ci 8237db96d56Sopenharmony_ci.. attribute:: ZipInfo.reserved 8247db96d56Sopenharmony_ci 8257db96d56Sopenharmony_ci Must be zero. 8267db96d56Sopenharmony_ci 8277db96d56Sopenharmony_ci 8287db96d56Sopenharmony_ci.. attribute:: ZipInfo.flag_bits 8297db96d56Sopenharmony_ci 8307db96d56Sopenharmony_ci ZIP flag bits. 8317db96d56Sopenharmony_ci 8327db96d56Sopenharmony_ci 8337db96d56Sopenharmony_ci.. attribute:: ZipInfo.volume 8347db96d56Sopenharmony_ci 8357db96d56Sopenharmony_ci Volume number of file header. 8367db96d56Sopenharmony_ci 8377db96d56Sopenharmony_ci 8387db96d56Sopenharmony_ci.. attribute:: ZipInfo.internal_attr 8397db96d56Sopenharmony_ci 8407db96d56Sopenharmony_ci Internal attributes. 8417db96d56Sopenharmony_ci 8427db96d56Sopenharmony_ci 8437db96d56Sopenharmony_ci.. attribute:: ZipInfo.external_attr 8447db96d56Sopenharmony_ci 8457db96d56Sopenharmony_ci External file attributes. 8467db96d56Sopenharmony_ci 8477db96d56Sopenharmony_ci 8487db96d56Sopenharmony_ci.. attribute:: ZipInfo.header_offset 8497db96d56Sopenharmony_ci 8507db96d56Sopenharmony_ci Byte offset to the file header. 8517db96d56Sopenharmony_ci 8527db96d56Sopenharmony_ci 8537db96d56Sopenharmony_ci.. attribute:: ZipInfo.CRC 8547db96d56Sopenharmony_ci 8557db96d56Sopenharmony_ci CRC-32 of the uncompressed file. 8567db96d56Sopenharmony_ci 8577db96d56Sopenharmony_ci 8587db96d56Sopenharmony_ci.. attribute:: ZipInfo.compress_size 8597db96d56Sopenharmony_ci 8607db96d56Sopenharmony_ci Size of the compressed data. 8617db96d56Sopenharmony_ci 8627db96d56Sopenharmony_ci 8637db96d56Sopenharmony_ci.. attribute:: ZipInfo.file_size 8647db96d56Sopenharmony_ci 8657db96d56Sopenharmony_ci Size of the uncompressed file. 8667db96d56Sopenharmony_ci 8677db96d56Sopenharmony_ci 8687db96d56Sopenharmony_ci.. _zipfile-commandline: 8697db96d56Sopenharmony_ci.. program:: zipfile 8707db96d56Sopenharmony_ci 8717db96d56Sopenharmony_ciCommand-Line Interface 8727db96d56Sopenharmony_ci---------------------- 8737db96d56Sopenharmony_ci 8747db96d56Sopenharmony_ciThe :mod:`zipfile` module provides a simple command-line interface to interact 8757db96d56Sopenharmony_ciwith ZIP archives. 8767db96d56Sopenharmony_ci 8777db96d56Sopenharmony_ciIf you want to create a new ZIP archive, specify its name after the :option:`-c` 8787db96d56Sopenharmony_cioption and then list the filename(s) that should be included: 8797db96d56Sopenharmony_ci 8807db96d56Sopenharmony_ci.. code-block:: shell-session 8817db96d56Sopenharmony_ci 8827db96d56Sopenharmony_ci $ python -m zipfile -c monty.zip spam.txt eggs.txt 8837db96d56Sopenharmony_ci 8847db96d56Sopenharmony_ciPassing a directory is also acceptable: 8857db96d56Sopenharmony_ci 8867db96d56Sopenharmony_ci.. code-block:: shell-session 8877db96d56Sopenharmony_ci 8887db96d56Sopenharmony_ci $ python -m zipfile -c monty.zip life-of-brian_1979/ 8897db96d56Sopenharmony_ci 8907db96d56Sopenharmony_ciIf you want to extract a ZIP archive into the specified directory, use 8917db96d56Sopenharmony_cithe :option:`-e` option: 8927db96d56Sopenharmony_ci 8937db96d56Sopenharmony_ci.. code-block:: shell-session 8947db96d56Sopenharmony_ci 8957db96d56Sopenharmony_ci $ python -m zipfile -e monty.zip target-dir/ 8967db96d56Sopenharmony_ci 8977db96d56Sopenharmony_ciFor a list of the files in a ZIP archive, use the :option:`-l` option: 8987db96d56Sopenharmony_ci 8997db96d56Sopenharmony_ci.. code-block:: shell-session 9007db96d56Sopenharmony_ci 9017db96d56Sopenharmony_ci $ python -m zipfile -l monty.zip 9027db96d56Sopenharmony_ci 9037db96d56Sopenharmony_ci 9047db96d56Sopenharmony_ciCommand-line options 9057db96d56Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~ 9067db96d56Sopenharmony_ci 9077db96d56Sopenharmony_ci.. cmdoption:: -l <zipfile> 9087db96d56Sopenharmony_ci --list <zipfile> 9097db96d56Sopenharmony_ci 9107db96d56Sopenharmony_ci List files in a zipfile. 9117db96d56Sopenharmony_ci 9127db96d56Sopenharmony_ci.. cmdoption:: -c <zipfile> <source1> ... <sourceN> 9137db96d56Sopenharmony_ci --create <zipfile> <source1> ... <sourceN> 9147db96d56Sopenharmony_ci 9157db96d56Sopenharmony_ci Create zipfile from source files. 9167db96d56Sopenharmony_ci 9177db96d56Sopenharmony_ci.. cmdoption:: -e <zipfile> <output_dir> 9187db96d56Sopenharmony_ci --extract <zipfile> <output_dir> 9197db96d56Sopenharmony_ci 9207db96d56Sopenharmony_ci Extract zipfile into target directory. 9217db96d56Sopenharmony_ci 9227db96d56Sopenharmony_ci.. cmdoption:: -t <zipfile> 9237db96d56Sopenharmony_ci --test <zipfile> 9247db96d56Sopenharmony_ci 9257db96d56Sopenharmony_ci Test whether the zipfile is valid or not. 9267db96d56Sopenharmony_ci 9277db96d56Sopenharmony_ci.. cmdoption:: --metadata-encoding <encoding> 9287db96d56Sopenharmony_ci 9297db96d56Sopenharmony_ci Specify encoding of member names for :option:`-l`, :option:`-e` and 9307db96d56Sopenharmony_ci :option:`-t`. 9317db96d56Sopenharmony_ci 9327db96d56Sopenharmony_ci .. versionadded:: 3.11 9337db96d56Sopenharmony_ci 9347db96d56Sopenharmony_ci 9357db96d56Sopenharmony_ciDecompression pitfalls 9367db96d56Sopenharmony_ci---------------------- 9377db96d56Sopenharmony_ci 9387db96d56Sopenharmony_ciThe extraction in zipfile module might fail due to some pitfalls listed below. 9397db96d56Sopenharmony_ci 9407db96d56Sopenharmony_ciFrom file itself 9417db96d56Sopenharmony_ci~~~~~~~~~~~~~~~~ 9427db96d56Sopenharmony_ci 9437db96d56Sopenharmony_ciDecompression may fail due to incorrect password / CRC checksum / ZIP format or 9447db96d56Sopenharmony_ciunsupported compression method / decryption. 9457db96d56Sopenharmony_ci 9467db96d56Sopenharmony_ciFile System limitations 9477db96d56Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~ 9487db96d56Sopenharmony_ci 9497db96d56Sopenharmony_ciExceeding limitations on different file systems can cause decompression failed. 9507db96d56Sopenharmony_ciSuch as allowable characters in the directory entries, length of the file name, 9517db96d56Sopenharmony_cilength of the pathname, size of a single file, and number of files, etc. 9527db96d56Sopenharmony_ci 9537db96d56Sopenharmony_ci.. _zipfile-resources-limitations: 9547db96d56Sopenharmony_ci 9557db96d56Sopenharmony_ciResources limitations 9567db96d56Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~ 9577db96d56Sopenharmony_ci 9587db96d56Sopenharmony_ciThe lack of memory or disk volume would lead to decompression 9597db96d56Sopenharmony_cifailed. For example, decompression bombs (aka `ZIP bomb`_) 9607db96d56Sopenharmony_ciapply to zipfile library that can cause disk volume exhaustion. 9617db96d56Sopenharmony_ci 9627db96d56Sopenharmony_ciInterruption 9637db96d56Sopenharmony_ci~~~~~~~~~~~~ 9647db96d56Sopenharmony_ci 9657db96d56Sopenharmony_ciInterruption during the decompression, such as pressing control-C or killing the 9667db96d56Sopenharmony_cidecompression process may result in incomplete decompression of the archive. 9677db96d56Sopenharmony_ci 9687db96d56Sopenharmony_ciDefault behaviors of extraction 9697db96d56Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 9707db96d56Sopenharmony_ci 9717db96d56Sopenharmony_ciNot knowing the default extraction behaviors 9727db96d56Sopenharmony_cican cause unexpected decompression results. 9737db96d56Sopenharmony_ciFor example, when extracting the same archive twice, 9747db96d56Sopenharmony_ciit overwrites files without asking. 9757db96d56Sopenharmony_ci 9767db96d56Sopenharmony_ci 9777db96d56Sopenharmony_ci.. _ZIP bomb: https://en.wikipedia.org/wiki/Zip_bomb 9787db96d56Sopenharmony_ci.. _PKZIP Application Note: https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT 979