\section{\module{zipfile} ---
         Work with ZIP archives}

\declaremodule{standard}{zipfile}
\modulesynopsis{Read and write ZIP-format archive files.}
\moduleauthor{James C. Ahlstrom}{jim@interet.com}
\sectionauthor{James C. Ahlstrom}{jim@interet.com}
% LaTeX markup by Fred L. Drake, Jr. <fdrake@acm.org>

\versionadded{1.6}

The ZIP file format is a common archive and compression standard.
This module provides tools to create, read, write, append, and list a
ZIP file.  Any advanced use of this module will require an
understanding of the format, as defined in
\citetitle[http://www.pkware.com/appnote.html]{PKZIP Application
Note}.

This module does not currently handle ZIP files which have appended
comments, or multi-disk ZIP files.

The available attributes of this module are:

\begin{excdesc}{error}
  The error raised for bad ZIP files.
\end{excdesc}

\begin{classdesc*}{ZipFile}
  The class for reading and writing ZIP files.  See
  ``\citetitle{ZipFile Objects}'' (section \ref{zipfile-objects}) for
  constructor details.
\end{classdesc*}

\begin{classdesc*}{PyZipFile}
  Class for creating ZIP archives containing Python libraries.
\end{classdesc*}

\begin{classdesc}{ZipInfo}{\optional{filename\optional{, date_time}}}
  Class used to represent information about a member of an archive.
  Instances of this class are returned by the \method{getinfo()} and
  \method{infolist()} methods of \class{ZipFile} objects.  Most users
  of the \module{zipfile} module will not need to create these, but
  only use those created by this module.
  \var{filename} should be the full name of the archive member, and
  \var{date_time} should be a tuple containing six fields which
  describe the time of the last modification to the file; the fields
  are described in section \ref{zipinfo-objects}, ``ZipInfo Objects.''
\end{classdesc}

\begin{funcdesc}{is_zipfile}{filename}
  Returns \code{True} if \var{filename} is a valid ZIP file based on its magic
  number, otherwise returns \code{False}.  This module does not currently
  handle ZIP files which have appended comments.
\end{funcdesc}

\begin{datadesc}{ZIP_STORED}
  The numeric constant for an uncompressed archive member.
\end{datadesc}

\begin{datadesc}{ZIP_DEFLATED}
  The numeric constant for the usual ZIP compression method.  This
  requires the zlib module.  No other compression methods are
  currently supported.
\end{datadesc}


\begin{seealso}
  \seetitle[http://www.pkware.com/appnote.html]{PKZIP Application
            Note}{Documentation on the ZIP file format by Phil
            Katz, the creator of the format and algorithms used.}

  \seetitle[http://www.info-zip.org/pub/infozip/]{Info-ZIP Home Page}{
            Information about the Info-ZIP project's ZIP archive
            programs and development libraries.}
\end{seealso}


\subsection{ZipFile Objects \label{zipfile-objects}}

\begin{classdesc}{ZipFile}{file\optional{, mode\optional{, compression}}} 
  Open a ZIP file, where \var{file} can be either a path to a file
  (a string) or a file-like object.  The \var{mode} parameter
  should be \code{'r'} to read an existing file, \code{'w'} to
  truncate and write a new file, or \code{'a'} to append to an
  existing file.  For \var{mode} is \code{'a'} and \var{file}
  refers to an existing ZIP file, then additional files are added to
  it.  If \var{file} does not refer to a ZIP file, then a new ZIP
  archive is appended to the file.  This is meant for adding a ZIP
  archive to another file, such as \file{python.exe}.  Using

\begin{verbatim}
cat myzip.zip >> python.exe
\end{verbatim}

  also works, and at least \program{WinZip} can read such files.
  \var{compression} is the ZIP compression method to use when writing
  the archive, and should be \constant{ZIP_STORED} or
  \constant{ZIP_DEFLATED}; unrecognized values will cause
  \exception{RuntimeError} to be raised.  If \constant{ZIP_DEFLATED}
  is specified but the \refmodule{zlib} module is not available,
  \exception{RuntimeError} is also raised.  The default is
  \constant{ZIP_STORED}. 
\end{classdesc}

\begin{methoddesc}{close}{}
  Close the archive file.  You must call \method{close()} before
  exiting your program or essential records will not be written. 
\end{methoddesc}

\begin{methoddesc}{getinfo}{name}
  Return a \class{ZipInfo} object with information about the archive
  member \var{name}.
\end{methoddesc}

\begin{methoddesc}{infolist}{}
  Return a list containing a \class{ZipInfo} object for each member of
  the archive.  The objects are in the same order as their entries in
  the actual ZIP file on disk if an existing archive was opened.
\end{methoddesc}

\begin{methoddesc}{namelist}{}
  Return a list of archive members by name.
\end{methoddesc}

\begin{methoddesc}{printdir}{}
  Print a table of contents for the archive to \code{sys.stdout}.
\end{methoddesc}

\begin{methoddesc}{read}{name}
  Return the bytes of the file in the archive.  The archive must be
  open for read or append.
\end{methoddesc}

\begin{methoddesc}{testzip}{}
  Read all the files in the archive and check their CRC's.  Return the
  name of the first bad file, or else return \code{None}.
\end{methoddesc}

\begin{methoddesc}{write}{filename\optional{, arcname\optional{,
                          compress_type}}}
  Write the file named \var{filename} to the archive, giving it the
  archive name \var{arcname} (by default, this will be the same as
  \var{filename}).  If given, \var{compress_type} overrides the value
  given for the \var{compression} parameter to the constructor for
  the new entry.  The archive must be open with mode \code{'w'} or
  \code{'a'}. 
\end{methoddesc}

\begin{methoddesc}{writestr}{zinfo_or_arcname, bytes}
  Write the string \var{bytes} to the archive; \var{zinfo_or_arcname}
  is either the file name it will be given in the archive, or a
  \class{ZipInfo} instance.  If it's an instance, at least the
  filename, date, and time must be given.  If it's a name, the date
  and time is set to the current date and time. The archive must be
  opened with mode \code{'w'} or \code{'a'}.
\end{methoddesc}


The following data attribute is also available:

\begin{memberdesc}{debug}
  The level of debug output to use.  This may be set from \code{0}
  (the default, no output) to \code{3} (the most output).  Debugging
  information is written to \code{sys.stdout}.
\end{memberdesc}


\subsection{PyZipFile Objects \label{pyzipfile-objects}}

The \class{PyZipFile} constructor takes the same parameters as the
\class{ZipFile} constructor.  Instances have one method in addition to
those of \class{ZipFile} objects.

\begin{methoddesc}[PyZipFile]{writepy}{pathname\optional{, basename}}
  Search for files \file{*.py} and add the corresponding file to the
  archive.  The corresponding file is a \file{*.pyo} file if
  available, else a \file{*.pyc} file, compiling if necessary.  If the
  pathname is a file, the filename must end with \file{.py}, and just
  the (corresponding \file{*.py[co]}) file is added at the top level
  (no path information).  If it is a directory, and the directory is
  not a package directory, then all the files \file{*.py[co]} are
  added at the top level.  If the directory is a package directory,
  then all \file{*.py[oc]} are added under the package name as a file
  path, and if any subdirectories are package directories, all of
  these are added recursively.  \var{basename} is intended for
  internal use only.  The \method{writepy()} method makes archives
  with file names like this:

\begin{verbatim}
    string.pyc                                # Top level name 
    test/__init__.pyc                         # Package directory 
    test/testall.pyc                          # Module test.testall
    test/bogus/__init__.pyc                   # Subpackage directory 
    test/bogus/myfile.pyc                     # Submodule test.bogus.myfile
\end{verbatim}
\end{methoddesc}


\subsection{ZipInfo Objects \label{zipinfo-objects}}

Instances of the \class{ZipInfo} class are returned by the
\method{getinfo()} and \method{infolist()} methods of
\class{ZipFile} objects.  Each object stores information about a
single member of the ZIP archive.

Instances have the following attributes:

\begin{memberdesc}[ZipInfo]{filename}
  Name of the file in the archive.
\end{memberdesc}

\begin{memberdesc}[ZipInfo]{date_time}
  The time and date of the last modification to the archive
  member.  This is a tuple of six values:

\begin{tableii}{c|l}{code}{Index}{Value}
  \lineii{0}{Year}
  \lineii{1}{Month (one-based)}
  \lineii{2}{Day of month (one-based)}
  \lineii{3}{Hours (zero-based)}
  \lineii{4}{Minutes (zero-based)}
  \lineii{5}{Seconds (zero-based)}
\end{tableii}
\end{memberdesc}

\begin{memberdesc}[ZipInfo]{compress_type}
  Type of compression for the archive member.
\end{memberdesc}

\begin{memberdesc}[ZipInfo]{comment}
  Comment for the individual archive member.
\end{memberdesc}

\begin{memberdesc}[ZipInfo]{extra}
  Expansion field data.  The
  \citetitle[http://www.pkware.com/appnote.html]{PKZIP Application
  Note} contains some comments on the internal structure of the data
  contained in this string.
\end{memberdesc}

\begin{memberdesc}[ZipInfo]{create_system}
  System which created ZIP archive.
\end{memberdesc}

\begin{memberdesc}[ZipInfo]{create_version}
  PKZIP version which created ZIP archive.
\end{memberdesc}

\begin{memberdesc}[ZipInfo]{extract_version}
  PKZIP version needed to extract archive.
\end{memberdesc}

\begin{memberdesc}[ZipInfo]{reserved}
  Must be zero.
\end{memberdesc}

\begin{memberdesc}[ZipInfo]{flag_bits}
  ZIP flag bits.
\end{memberdesc}

\begin{memberdesc}[ZipInfo]{volume}
  Volume number of file header.
\end{memberdesc}

\begin{memberdesc}[ZipInfo]{internal_attr}
  Internal attributes.
\end{memberdesc}

\begin{memberdesc}[ZipInfo]{external_attr}
 External file attributes.
\end{memberdesc}

\begin{memberdesc}[ZipInfo]{header_offset}
  Byte offset to the file header.
\end{memberdesc}

\begin{memberdesc}[ZipInfo]{file_offset}
  Byte offset to the start of the file data.
\end{memberdesc}

\begin{memberdesc}[ZipInfo]{CRC}
  CRC-32 of the uncompressed file.
\end{memberdesc}

\begin{memberdesc}[ZipInfo]{compress_size}
  Size of the compressed data.
\end{memberdesc}

\begin{memberdesc}[ZipInfo]{file_size}
  Size of the uncompressed file.
\end{memberdesc}
