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@interet.com> 8.. sectionauthor:: James C. Ahlstrom <jim@interet.com> 9 10**Source code:** :source:`Lib/zipfile.py` 11 12-------------- 13 14The ZIP file format is a common archive and compression standard. This module 15provides tools to create, read, write, append, and list a ZIP file. Any 16advanced use of this module will require an understanding of the format, as 17defined in `PKZIP Application Note`_. 18 19This module does not currently handle multi-disk ZIP files. 20It can handle ZIP files that use the ZIP64 extensions 21(that is ZIP files that are more than 4 GiB in size). It supports 22decryption of encrypted files in ZIP archives, but it currently cannot 23create an encrypted file. Decryption is extremely slow as it is 24implemented in native Python rather than C. 25 26The 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 129ZipFile 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 429The 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 452PyZipFile Objects 453----------------- 454 455The :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 528ZipInfo Objects 529--------------- 530 531Instances of the :class:`ZipInfo` class are returned by the :meth:`.getinfo` and 532:meth:`.infolist` methods of :class:`ZipFile` objects. Each object stores 533information about a single member of the ZIP archive. 534 535There is one classmethod to make a :class:`ZipInfo` instance for a filesystem 536file: 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 555Instances 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 677Command-Line Interface 678---------------------- 679 680The :mod:`zipfile` module provides a simple command-line interface to interact 681with ZIP archives. 682 683If you want to create a new ZIP archive, specify its name after the :option:`-c` 684option 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 690Passing a directory is also acceptable: 691 692.. code-block:: shell-session 693 694 $ python -m zipfile -c monty.zip life-of-brian_1979/ 695 696If you want to extract a ZIP archive into the specified directory, use 697the :option:`-e` option: 698 699.. code-block:: shell-session 700 701 $ python -m zipfile -e monty.zip target-dir/ 702 703For 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 710Command-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