Home | History | Annotate | Download | only in library
      1 :mod:`zipfile` --- Work with ZIP archives
      2 =========================================
      3 
      4 .. module:: zipfile
      5    :synopsis: Read and write ZIP-format archive files.
      6 
      7 .. moduleauthor:: James C. Ahlstrom <jim (a] interet.com>
      8 .. sectionauthor:: James C. Ahlstrom <jim (a] interet.com>
      9 
     10 **Source code:** :source:`Lib/zipfile.py`
     11 
     12 --------------
     13 
     14 The ZIP file format is a common archive and compression standard. This module
     15 provides tools to create, read, write, append, and list a ZIP file.  Any
     16 advanced use of this module will require an understanding of the format, as
     17 defined in `PKZIP Application Note`_.
     18 
     19 This module does not currently handle multi-disk ZIP files.
     20 It can handle ZIP files that use the ZIP64 extensions
     21 (that is ZIP files that are more than 4 GiB in size).  It supports
     22 decryption of encrypted files in ZIP archives, but it currently cannot
     23 create an encrypted file.  Decryption is extremely slow as it is
     24 implemented in native Python rather than C.
     25 
     26 The module defines the following items:
     27 
     28 .. exception:: BadZipFile
     29 
     30    The error raised for bad ZIP files.
     31 
     32    .. versionadded:: 3.2
     33 
     34 
     35 .. exception:: BadZipfile
     36 
     37    Alias of :exc:`BadZipFile`, for compatibility with older Python versions.
     38 
     39    .. deprecated:: 3.2
     40 
     41 
     42 .. exception:: LargeZipFile
     43 
     44    The error raised when a ZIP file would require ZIP64 functionality but that has
     45    not been enabled.
     46 
     47 
     48 .. class:: ZipFile
     49    :noindex:
     50 
     51    The class for reading and writing ZIP files.  See section
     52    :ref:`zipfile-objects` for constructor details.
     53 
     54 
     55 .. class:: PyZipFile
     56    :noindex:
     57 
     58    Class for creating ZIP archives containing Python libraries.
     59 
     60 
     61 .. class:: ZipInfo(filename='NoName', date_time=(1980,1,1,0,0,0))
     62 
     63    Class used to represent information about a member of an archive. Instances
     64    of this class are returned by the :meth:`.getinfo` and :meth:`.infolist`
     65    methods of :class:`ZipFile` objects.  Most users of the :mod:`zipfile` module
     66    will not need to create these, but only use those created by this
     67    module. *filename* should be the full name of the archive member, and
     68    *date_time* should be a tuple containing six fields which describe the time
     69    of the last modification to the file; the fields are described in section
     70    :ref:`zipinfo-objects`.
     71 
     72 
     73 .. function:: is_zipfile(filename)
     74 
     75    Returns ``True`` if *filename* is a valid ZIP file based on its magic number,
     76    otherwise returns ``False``.  *filename* may be a file or file-like object too.
     77 
     78    .. versionchanged:: 3.1
     79       Support for file and file-like objects.
     80 
     81 
     82 .. data:: ZIP_STORED
     83 
     84    The numeric constant for an uncompressed archive member.
     85 
     86 
     87 .. data:: ZIP_DEFLATED
     88 
     89    The numeric constant for the usual ZIP compression method.  This requires the
     90    :mod:`zlib` module.
     91 
     92 
     93 .. data:: ZIP_BZIP2
     94 
     95    The numeric constant for the BZIP2 compression method.  This requires the
     96    :mod:`bz2` module.
     97 
     98    .. versionadded:: 3.3
     99 
    100 .. data:: ZIP_LZMA
    101 
    102    The numeric constant for the LZMA compression method.  This requires the
    103    :mod:`lzma` module.
    104 
    105    .. versionadded:: 3.3
    106 
    107    .. note::
    108 
    109       The ZIP file format specification has included support for bzip2 compression
    110       since 2001, and for LZMA compression since 2006. However, some tools
    111       (including older Python releases) do not support these compression
    112       methods, and may either refuse to process the ZIP file altogether,
    113       or fail to extract individual files.
    114 
    115 
    116 .. seealso::
    117 
    118    `PKZIP Application Note`_
    119       Documentation on the ZIP file format by Phil Katz, the creator of the format and
    120       algorithms used.
    121 
    122    `Info-ZIP Home Page <http://www.info-zip.org/>`_
    123       Information about the Info-ZIP project's ZIP archive programs and development
    124       libraries.
    125 
    126 
    127 .. _zipfile-objects:
    128 
    129 ZipFile Objects
    130 ---------------
    131 
    132 
    133 .. class:: ZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True, \
    134                    compresslevel=None)
    135 
    136    Open a ZIP file, where *file* can be a path to a file (a string), a
    137    file-like object or a :term:`path-like object`.
    138 
    139    The *mode* parameter should be ``'r'`` to read an existing
    140    file, ``'w'`` to truncate and write a new file, ``'a'`` to append to an
    141    existing file, or ``'x'`` to exclusively create and write a new file.
    142    If *mode* is ``'x'`` and *file* refers to an existing file,
    143    a :exc:`FileExistsError` will be raised.
    144    If *mode* is ``'a'`` and *file* refers to an existing ZIP
    145    file, then additional files are added to it.  If *file* does not refer to a
    146    ZIP file, then a new ZIP archive is appended to the file.  This is meant for
    147    adding a ZIP archive to another file (such as :file:`python.exe`).  If
    148    *mode* is ``'a'`` and the file does not exist at all, it is created.
    149    If *mode* is ``'r'`` or ``'a'``, the file should be seekable.
    150 
    151    *compression* is the ZIP compression method to use when writing the archive,
    152    and should be :const:`ZIP_STORED`, :const:`ZIP_DEFLATED`,
    153    :const:`ZIP_BZIP2` or :const:`ZIP_LZMA`; unrecognized
    154    values will cause :exc:`NotImplementedError` to be raised.  If
    155    :const:`ZIP_DEFLATED`, :const:`ZIP_BZIP2` or :const:`ZIP_LZMA` is specified
    156    but the corresponding module (:mod:`zlib`, :mod:`bz2` or :mod:`lzma`) is not
    157    available, :exc:`RuntimeError` is raised. The default is :const:`ZIP_STORED`.
    158 
    159    If *allowZip64* is ``True`` (the default) zipfile will create ZIP files that
    160    use the ZIP64 extensions when the zipfile is larger than 4 GiB. If it is
    161    ``false`` :mod:`zipfile` will raise an exception when the ZIP file would
    162    require ZIP64 extensions.
    163 
    164    The *compresslevel* parameter controls the compression level to use when
    165    writing files to the archive.
    166    When using :const:`ZIP_STORED` or :const:`ZIP_LZMA` it has no effect.
    167    When using :const:`ZIP_DEFLATED` integers ``0`` through ``9`` are accepted
    168    (see :class:`zlib <zlib.compressobj>` for more information).
    169    When using :const:`ZIP_BZIP2` integers ``1`` through ``9`` are accepted
    170    (see :class:`bz2 <bz2.BZ2File>` for more information).
    171 
    172    If the file is created with mode ``'w'``, ``'x'`` or ``'a'`` and then
    173    :meth:`closed <close>` without adding any files to the archive, the appropriate
    174    ZIP structures for an empty archive will be written to the file.
    175 
    176    ZipFile is also a context manager and therefore supports the
    177    :keyword:`with` statement.  In the example, *myzip* is closed after the
    178    :keyword:`!with` statement's suite is finished---even if an exception occurs::
    179 
    180       with ZipFile('spam.zip', 'w') as myzip:
    181           myzip.write('eggs.txt')
    182 
    183    .. versionadded:: 3.2
    184       Added the ability to use :class:`ZipFile` as a context manager.
    185 
    186    .. versionchanged:: 3.3
    187       Added support for :mod:`bzip2 <bz2>` and :mod:`lzma` compression.
    188 
    189    .. versionchanged:: 3.4
    190       ZIP64 extensions are enabled by default.
    191 
    192    .. versionchanged:: 3.5
    193       Added support for writing to unseekable streams.
    194       Added support for the ``'x'`` mode.
    195 
    196    .. versionchanged:: 3.6
    197       Previously, a plain :exc:`RuntimeError` was raised for unrecognized
    198       compression values.
    199 
    200    .. versionchanged:: 3.6.2
    201       The *file* parameter accepts a :term:`path-like object`.
    202 
    203    .. versionchanged:: 3.7
    204       Add the *compresslevel* parameter.
    205 
    206 
    207 .. method:: ZipFile.close()
    208 
    209    Close the archive file.  You must call :meth:`close` before exiting your program
    210    or essential records will not be written.
    211 
    212 
    213 .. method:: ZipFile.getinfo(name)
    214 
    215    Return a :class:`ZipInfo` object with information about the archive member
    216    *name*.  Calling :meth:`getinfo` for a name not currently contained in the
    217    archive will raise a :exc:`KeyError`.
    218 
    219 
    220 .. method:: ZipFile.infolist()
    221 
    222    Return a list containing a :class:`ZipInfo` object for each member of the
    223    archive.  The objects are in the same order as their entries in the actual ZIP
    224    file on disk if an existing archive was opened.
    225 
    226 
    227 .. method:: ZipFile.namelist()
    228 
    229    Return a list of archive members by name.
    230 
    231 
    232 .. method:: ZipFile.open(name, mode='r', pwd=None, *, force_zip64=False)
    233 
    234    Access a member of the archive as a binary file-like object.  *name*
    235    can be either the name of a file within the archive or a :class:`ZipInfo`
    236    object.  The *mode* parameter, if included, must be ``'r'`` (the default)
    237    or ``'w'``.  *pwd* is the password used to decrypt encrypted ZIP files.
    238 
    239    :meth:`~ZipFile.open` is also a context manager and therefore supports the
    240    :keyword:`with` statement::
    241 
    242       with ZipFile('spam.zip') as myzip:
    243           with myzip.open('eggs.txt') as myfile:
    244               print(myfile.read())
    245 
    246    With *mode* ``'r'`` the file-like object
    247    (``ZipExtFile``) is read-only and provides the following methods:
    248    :meth:`~io.BufferedIOBase.read`, :meth:`~io.IOBase.readline`,
    249    :meth:`~io.IOBase.readlines`, :meth:`~io.IOBase.seek`,
    250    :meth:`~io.IOBase.tell`, :meth:`__iter__`, :meth:`~iterator.__next__`.
    251    These objects can operate independently of the ZipFile.
    252 
    253    With ``mode='w'``, a writable file handle is returned, which supports the
    254    :meth:`~io.BufferedIOBase.write` method.  While a writable file handle is open,
    255    attempting to read or write other files in the ZIP file will raise a
    256    :exc:`ValueError`.
    257 
    258    When writing a file, if the file size is not known in advance but may exceed
    259    2 GiB, pass ``force_zip64=True`` to ensure that the header format is
    260    capable of supporting large files.  If the file size is known in advance,
    261    construct a :class:`ZipInfo` object with :attr:`~ZipInfo.file_size` set, and
    262    use that as the *name* parameter.
    263 
    264    .. note::
    265 
    266       The :meth:`.open`, :meth:`read` and :meth:`extract` methods can take a filename
    267       or a :class:`ZipInfo` object.  You will appreciate this when trying to read a
    268       ZIP file that contains members with duplicate names.
    269 
    270    .. versionchanged:: 3.6
    271       Removed support of ``mode='U'``.  Use :class:`io.TextIOWrapper` for reading
    272       compressed text files in :term:`universal newlines` mode.
    273 
    274    .. versionchanged:: 3.6
    275       :meth:`open` can now be used to write files into the archive with the
    276       ``mode='w'`` option.
    277 
    278    .. versionchanged:: 3.6
    279       Calling :meth:`.open` on a closed ZipFile will raise a :exc:`ValueError`.
    280       Previously, a :exc:`RuntimeError` was raised.
    281 
    282 
    283 .. method:: ZipFile.extract(member, path=None, pwd=None)
    284 
    285    Extract a member from the archive to the current working directory; *member*
    286    must be its full name or a :class:`ZipInfo` object.  Its file information is
    287    extracted as accurately as possible.  *path* specifies a different directory
    288    to extract to.  *member* can be a filename or a :class:`ZipInfo` object.
    289    *pwd* is the password used for encrypted files.
    290 
    291    Returns the normalized path created (a directory or new file).
    292 
    293    .. note::
    294 
    295       If a member filename is an absolute path, a drive/UNC sharepoint and
    296       leading (back)slashes will be stripped, e.g.: ``///foo/bar`` becomes
    297       ``foo/bar`` on Unix, and ``C:\foo\bar`` becomes ``foo\bar`` on Windows.
    298       And all ``".."`` components in a member filename will be removed, e.g.:
    299       ``../../foo../../ba..r`` becomes ``foo../ba..r``.  On Windows illegal
    300       characters (``:``, ``<``, ``>``, ``|``, ``"``, ``?``, and ``*``)
    301       replaced by underscore (``_``).
    302 
    303    .. versionchanged:: 3.6
    304       Calling :meth:`extract` on a closed ZipFile will raise a
    305       :exc:`ValueError`.  Previously, a :exc:`RuntimeError` was raised.
    306 
    307    .. versionchanged:: 3.6.2
    308       The *path* parameter accepts a :term:`path-like object`.
    309 
    310 
    311 .. method:: ZipFile.extractall(path=None, members=None, pwd=None)
    312 
    313    Extract all members from the archive to the current working directory.  *path*
    314    specifies a different directory to extract to.  *members* is optional and must
    315    be a subset of the list returned by :meth:`namelist`.  *pwd* is the password
    316    used for encrypted files.
    317 
    318    .. warning::
    319 
    320       Never extract archives from untrusted sources without prior inspection.
    321       It is possible that files are created outside of *path*, e.g. members
    322       that have absolute filenames starting with ``"/"`` or filenames with two
    323       dots ``".."``.  This module attempts to prevent that.
    324       See :meth:`extract` note.
    325 
    326    .. versionchanged:: 3.6
    327       Calling :meth:`extractall` on a closed ZipFile will raise a
    328       :exc:`ValueError`.  Previously, a :exc:`RuntimeError` was raised.
    329 
    330    .. versionchanged:: 3.6.2
    331       The *path* parameter accepts a :term:`path-like object`.
    332 
    333 
    334 .. method:: ZipFile.printdir()
    335 
    336    Print a table of contents for the archive to ``sys.stdout``.
    337 
    338 
    339 .. method:: ZipFile.setpassword(pwd)
    340 
    341    Set *pwd* as default password to extract encrypted files.
    342 
    343 
    344 .. method:: ZipFile.read(name, pwd=None)
    345 
    346    Return the bytes of the file *name* in the archive.  *name* is the name of the
    347    file in the archive, or a :class:`ZipInfo` object.  The archive must be open for
    348    read or append. *pwd* is the password used for encrypted  files and, if specified,
    349    it will override the default password set with :meth:`setpassword`.  Calling
    350    :meth:`read` on a ZipFile that uses a compression method other than
    351    :const:`ZIP_STORED`, :const:`ZIP_DEFLATED`, :const:`ZIP_BZIP2` or
    352    :const:`ZIP_LZMA` will raise a :exc:`NotImplementedError`. An error will also
    353    be raised if the corresponding compression module is not available.
    354 
    355    .. versionchanged:: 3.6
    356       Calling :meth:`read` on a closed ZipFile will raise a :exc:`ValueError`.
    357       Previously, a :exc:`RuntimeError` was raised.
    358 
    359 
    360 .. method:: ZipFile.testzip()
    361 
    362    Read all the files in the archive and check their CRC's and file headers.
    363    Return the name of the first bad file, or else return ``None``.
    364 
    365    .. versionchanged:: 3.6
    366       Calling :meth:`testzip` on a closed ZipFile will raise a
    367       :exc:`ValueError`.  Previously, a :exc:`RuntimeError` was raised.
    368 
    369 
    370 .. method:: ZipFile.write(filename, arcname=None, compress_type=None, \
    371                           compresslevel=None)
    372 
    373    Write the file named *filename* to the archive, giving it the archive name
    374    *arcname* (by default, this will be the same as *filename*, but without a drive
    375    letter and with leading path separators removed).  If given, *compress_type*
    376    overrides the value given for the *compression* parameter to the constructor for
    377    the new entry. Similarly, *compresslevel* will override the constructor if
    378    given.
    379    The archive must be open with mode ``'w'``, ``'x'`` or ``'a'``.
    380 
    381    .. note::
    382 
    383       Archive names should be relative to the archive root, that is, they should not
    384       start with a path separator.
    385 
    386    .. note::
    387 
    388       If ``arcname`` (or ``filename``, if ``arcname`` is  not given) contains a null
    389       byte, the name of the file in the archive will be truncated at the null byte.
    390 
    391    .. versionchanged:: 3.6
    392       Calling :meth:`write` on a ZipFile created with mode ``'r'`` or
    393       a closed ZipFile will raise a :exc:`ValueError`.  Previously,
    394       a :exc:`RuntimeError` was raised.
    395 
    396 
    397 .. method:: ZipFile.writestr(zinfo_or_arcname, data, compress_type=None, \
    398                              compresslevel=None)
    399 
    400    Write a file into the archive.  The contents is *data*, which may be either
    401    a :class:`str` or a :class:`bytes` instance; if it is a :class:`str`,
    402    it is encoded as UTF-8 first.  *zinfo_or_arcname* is either the file
    403    name it will be given in the archive, or a :class:`ZipInfo` instance.  If it's
    404    an instance, at least the filename, date, and time must be given.  If it's a
    405    name, the date and time is set to the current date and time.
    406    The archive must be opened with mode ``'w'``, ``'x'`` or ``'a'``.
    407 
    408    If given, *compress_type* overrides the value given for the *compression*
    409    parameter to the constructor for the new entry, or in the *zinfo_or_arcname*
    410    (if that is a :class:`ZipInfo` instance). Similarly, *compresslevel* will
    411    override the constructor if given.
    412 
    413    .. note::
    414 
    415       When passing a :class:`ZipInfo` instance as the *zinfo_or_arcname* parameter,
    416       the compression method used will be that specified in the *compress_type*
    417       member of the given :class:`ZipInfo` instance.  By default, the
    418       :class:`ZipInfo` constructor sets this member to :const:`ZIP_STORED`.
    419 
    420    .. versionchanged:: 3.2
    421       The *compress_type* argument.
    422 
    423    .. versionchanged:: 3.6
    424       Calling :meth:`writestr` on a ZipFile created with mode ``'r'`` or
    425       a closed ZipFile will raise a :exc:`ValueError`.  Previously,
    426       a :exc:`RuntimeError` was raised.
    427 
    428 
    429 The following data attributes are also available:
    430 
    431 .. attribute:: ZipFile.filename
    432 
    433    Name of the ZIP file.
    434 
    435 .. attribute:: ZipFile.debug
    436 
    437    The level of debug output to use.  This may be set from ``0`` (the default, no
    438    output) to ``3`` (the most output).  Debugging information is written to
    439    ``sys.stdout``.
    440 
    441 .. attribute:: ZipFile.comment
    442 
    443    The comment associated with the ZIP file as a :class:`bytes` object.
    444    If assigning a comment to a
    445    :class:`ZipFile` instance created with mode ``'w'``, ``'x'`` or ``'a'``,
    446    it should be no longer than 65535 bytes.  Comments longer than this will be
    447    truncated.
    448 
    449 
    450 .. _pyzipfile-objects:
    451 
    452 PyZipFile Objects
    453 -----------------
    454 
    455 The :class:`PyZipFile` constructor takes the same parameters as the
    456 :class:`ZipFile` constructor, and one additional parameter, *optimize*.
    457 
    458 .. class:: PyZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True, \
    459                      optimize=-1)
    460 
    461    .. versionadded:: 3.2
    462       The *optimize* parameter.
    463 
    464    .. versionchanged:: 3.4
    465       ZIP64 extensions are enabled by default.
    466 
    467    Instances have one method in addition to those of :class:`ZipFile` objects:
    468 
    469    .. method:: PyZipFile.writepy(pathname, basename='', filterfunc=None)
    470 
    471       Search for files :file:`\*.py` and add the corresponding file to the
    472       archive.
    473 
    474       If the *optimize* parameter to :class:`PyZipFile` was not given or ``-1``,
    475       the corresponding file is a :file:`\*.pyc` file, compiling if necessary.
    476 
    477       If the *optimize* parameter to :class:`PyZipFile` was ``0``, ``1`` or
    478       ``2``, only files with that optimization level (see :func:`compile`) are
    479       added to the archive, compiling if necessary.
    480 
    481       If *pathname* is a file, the filename must end with :file:`.py`, and
    482       just the (corresponding :file:`\*.pyc`) file is added at the top level
    483       (no path information).  If *pathname* is a file that does not end with
    484       :file:`.py`, a :exc:`RuntimeError` will be raised.  If it is a directory,
    485       and the directory is not a package directory, then all the files
    486       :file:`\*.pyc` are added at the top level.  If the directory is a
    487       package directory, then all :file:`\*.pyc` are added under the package
    488       name as a file path, and if any subdirectories are package directories,
    489       all of these are added recursively in sorted order.
    490 
    491       *basename* is intended for internal use only.
    492 
    493       *filterfunc*, if given, must be a function taking a single string
    494       argument.  It will be passed each path (including each individual full
    495       file path) before it is added to the archive.  If *filterfunc* returns a
    496       false value, the path will not be added, and if it is a directory its
    497       contents will be ignored.  For example, if our test files are all either
    498       in ``test`` directories or start with the string ``test_``, we can use a
    499       *filterfunc* to exclude them::
    500 
    501           >>> zf = PyZipFile('myprog.zip')
    502           >>> def notests(s):
    503           ...     fn = os.path.basename(s)
    504           ...     return (not (fn == 'test' or fn.startswith('test_')))
    505           >>> zf.writepy('myprog', filterfunc=notests)
    506 
    507       The :meth:`writepy` method makes archives with file names like
    508       this::
    509 
    510          string.pyc                   # Top level name
    511          test/__init__.pyc            # Package directory
    512          test/testall.pyc             # Module test.testall
    513          test/bogus/__init__.pyc      # Subpackage directory
    514          test/bogus/myfile.pyc        # Submodule test.bogus.myfile
    515 
    516       .. versionadded:: 3.4
    517          The *filterfunc* parameter.
    518 
    519       .. versionchanged:: 3.6.2
    520          The *pathname* parameter accepts a :term:`path-like object`.
    521 
    522       .. versionchanged:: 3.7
    523          Recursion sorts directory entries.
    524 
    525 
    526 .. _zipinfo-objects:
    527 
    528 ZipInfo Objects
    529 ---------------
    530 
    531 Instances of the :class:`ZipInfo` class are returned by the :meth:`.getinfo` and
    532 :meth:`.infolist` methods of :class:`ZipFile` objects.  Each object stores
    533 information about a single member of the ZIP archive.
    534 
    535 There is one classmethod to make a :class:`ZipInfo` instance for a filesystem
    536 file:
    537 
    538 .. classmethod:: ZipInfo.from_file(filename, arcname=None)
    539 
    540    Construct a :class:`ZipInfo` instance for a file on the filesystem, in
    541    preparation for adding it to a zip file.
    542 
    543    *filename* should be the path to a file or directory on the filesystem.
    544 
    545    If *arcname* is specified, it is used as the name within the archive.
    546    If *arcname* is not specified, the name will be the same as *filename*, but
    547    with any drive letter and leading path separators removed.
    548 
    549    .. versionadded:: 3.6
    550 
    551    .. versionchanged:: 3.6.2
    552       The *filename* parameter accepts a :term:`path-like object`.
    553 
    554 
    555 Instances have the following methods and attributes:
    556 
    557 .. method:: ZipInfo.is_dir()
    558 
    559    Return ``True`` if this archive member is a directory.
    560 
    561    This uses the entry's name: directories should always end with ``/``.
    562 
    563    .. versionadded:: 3.6
    564 
    565 
    566 .. attribute:: ZipInfo.filename
    567 
    568    Name of the file in the archive.
    569 
    570 
    571 .. attribute:: ZipInfo.date_time
    572 
    573    The time and date of the last modification to the archive member.  This is a
    574    tuple of six values:
    575 
    576    +-------+--------------------------+
    577    | Index | Value                    |
    578    +=======+==========================+
    579    | ``0`` | Year (>= 1980)           |
    580    +-------+--------------------------+
    581    | ``1`` | Month (one-based)        |
    582    +-------+--------------------------+
    583    | ``2`` | Day of month (one-based) |
    584    +-------+--------------------------+
    585    | ``3`` | Hours (zero-based)       |
    586    +-------+--------------------------+
    587    | ``4`` | Minutes (zero-based)     |
    588    +-------+--------------------------+
    589    | ``5`` | Seconds (zero-based)     |
    590    +-------+--------------------------+
    591 
    592    .. note::
    593 
    594       The ZIP file format does not support timestamps before 1980.
    595 
    596 
    597 .. attribute:: ZipInfo.compress_type
    598 
    599    Type of compression for the archive member.
    600 
    601 
    602 .. attribute:: ZipInfo.comment
    603 
    604    Comment for the individual archive member as a :class:`bytes` object.
    605 
    606 
    607 .. attribute:: ZipInfo.extra
    608 
    609    Expansion field data.  The `PKZIP Application Note`_ contains
    610    some comments on the internal structure of the data contained in this
    611    :class:`bytes` object.
    612 
    613 
    614 .. attribute:: ZipInfo.create_system
    615 
    616    System which created ZIP archive.
    617 
    618 
    619 .. attribute:: ZipInfo.create_version
    620 
    621    PKZIP version which created ZIP archive.
    622 
    623 
    624 .. attribute:: ZipInfo.extract_version
    625 
    626    PKZIP version needed to extract archive.
    627 
    628 
    629 .. attribute:: ZipInfo.reserved
    630 
    631    Must be zero.
    632 
    633 
    634 .. attribute:: ZipInfo.flag_bits
    635 
    636    ZIP flag bits.
    637 
    638 
    639 .. attribute:: ZipInfo.volume
    640 
    641    Volume number of file header.
    642 
    643 
    644 .. attribute:: ZipInfo.internal_attr
    645 
    646    Internal attributes.
    647 
    648 
    649 .. attribute:: ZipInfo.external_attr
    650 
    651    External file attributes.
    652 
    653 
    654 .. attribute:: ZipInfo.header_offset
    655 
    656    Byte offset to the file header.
    657 
    658 
    659 .. attribute:: ZipInfo.CRC
    660 
    661    CRC-32 of the uncompressed file.
    662 
    663 
    664 .. attribute:: ZipInfo.compress_size
    665 
    666    Size of the compressed data.
    667 
    668 
    669 .. attribute:: ZipInfo.file_size
    670 
    671    Size of the uncompressed file.
    672 
    673 
    674 .. _zipfile-commandline:
    675 .. program:: zipfile
    676 
    677 Command-Line Interface
    678 ----------------------
    679 
    680 The :mod:`zipfile` module provides a simple command-line interface to interact
    681 with ZIP archives.
    682 
    683 If you want to create a new ZIP archive, specify its name after the :option:`-c`
    684 option and then list the filename(s) that should be included:
    685 
    686 .. code-block:: shell-session
    687 
    688     $ python -m zipfile -c monty.zip spam.txt eggs.txt
    689 
    690 Passing a directory is also acceptable:
    691 
    692 .. code-block:: shell-session
    693 
    694     $ python -m zipfile -c monty.zip life-of-brian_1979/
    695 
    696 If you want to extract a ZIP archive into the specified directory, use
    697 the :option:`-e` option:
    698 
    699 .. code-block:: shell-session
    700 
    701     $ python -m zipfile -e monty.zip target-dir/
    702 
    703 For a list of the files in a ZIP archive, use the :option:`-l` option:
    704 
    705 .. code-block:: shell-session
    706 
    707     $ python -m zipfile -l monty.zip
    708 
    709 
    710 Command-line options
    711 ~~~~~~~~~~~~~~~~~~~~
    712 
    713 .. cmdoption:: -l <zipfile>
    714                --list <zipfile>
    715 
    716    List files in a zipfile.
    717 
    718 .. cmdoption:: -c <zipfile> <source1> ... <sourceN>
    719                --create <zipfile> <source1> ... <sourceN>
    720 
    721    Create zipfile from source files.
    722 
    723 .. cmdoption:: -e <zipfile> <output_dir>
    724                --extract <zipfile> <output_dir>
    725 
    726    Extract zipfile into target directory.
    727 
    728 .. cmdoption:: -t <zipfile>
    729                --test <zipfile>
    730 
    731    Test whether the zipfile is valid or not.
    732 
    733 
    734 .. _PKZIP Application Note: https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT
    735