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