12.1. "zlib" — Compression compatible avec **gzip**
***************************************************

Pour des applications nécessitant de compresser des données, les
fonctions de ce module permettent la compression et la décompression
via la bibliothèque *zlib*. La bibliothèque *zlib* a sa propre page
web sur http://www.zlib.net. Il existe des incompatibilités connues
entre le module Python et les versions de la bibliothèque *zlib* plus
anciennes que la 1.1.3 ; 1.1.3 contient des failles de sécurité et
nous recommandons d’utiliser plutôt la version 1.14 ou plus récente.

les fonctions *zlib* recèlent de nombreuses options et il est
nécessaire de suivre un ordre précis.  Cette documentation n’a pas
pour but de couvrir la globalité des possibilités. Aussi, veuillez
consulter le manuel *zlib* en ligne sur
http://www.zlib.net/manual.html pour compléter davantage son
utilisation.

Pour lire ou écrire des fichiers ".gz" veuillez consulter le module
"gzip".

Les exceptions et fonctions disponibles dans ce module sont :

exception zlib.error

   Exception levée lors d’erreurs de compression et de décompression.

zlib.adler32(data[, value])

   Computes an Adler-32 checksum of *data*.  (An Adler-32 checksum is
   almost as reliable as a CRC32 but can be computed much more
   quickly.)  If *value* is present, it is used as the starting value
   of the checksum; otherwise, a fixed default value is used.  This
   allows computing a running checksum over the concatenation of
   several inputs.  The algorithm is not cryptographically strong, and
   should not be used for authentication or digital signatures.  Since
   the algorithm is designed for use as a checksum algorithm, it is
   not suitable for use as a general hash algorithm.

   This function always returns an integer object.

Note: To generate the same numeric value across all Python versions
  and platforms use adler32(data) & 0xffffffff.  If you are only using
  the checksum in packed binary format this is not necessary as the
  return value is the correct 32bit binary representation regardless
  of sign.

Modifié dans la version 2.6: The return value is in the range [-2**31,
2**31-1] regardless of platform.  In older versions the value is
signed on some platforms and unsigned on others.

Modifié dans la version 3.0: The return value is unsigned and in the
range [0, 2**32-1] regardless of platform.

zlib.compress(string[, level])

   Compresses the data in *string*, returning a string contained
   compressed data. *level* is an integer from "0" to "9" controlling
   the level of compression; "1" is fastest and produces the least
   compression, "9" is slowest and produces the most.  "0" is no
   compression.  The default value is "6". Raises the "error"
   exception if any error occurs.

zlib.compressobj([level[, method[, wbits[, memlevel[, strategy]]]]])

   Returns a compression object, to be used for compressing data
   streams that won’t fit into memory at once.  *level* is an integer
   from "0" to "9" or "-1", controlling the level of compression; "1"
   is fastest and produces the least compression, "9" is slowest and
   produces the most.  "0" is no compression.  The default value is
   "-1" (Z_DEFAULT_COMPRESSION). Z_DEFAULT_COMPRESSION represents a
   default compromise between speed and compression (currently
   equivalent to level 6).

   *method* is the compression algorithm. Currently, the only
   supported value is "DEFLATED".

   The *wbits* argument controls the size of the history buffer (or
   the « window size ») used when compressing data, and whether a
   header and trailer is included in the output.  It can take several
   ranges of values. The default is 15.

   * De +9 à +15 : le logarithme binaire de la taille du tampon, par
     conséquent compris entre 512 et 32768. Des valeurs plus grandes
     produisent de meilleures compressions au dépens d’une utilisation
     mémoire plus grande. Le résultat final inclus des en-tête et des
     blocs spécifiques à *zlib*.

   * De "-9" à "-15" : utilise la valeur absolue de *wbits* comme
     logarithme binaire de la taille du tampon, et ne produit pas
     d’entêtes ni de bloc final.

   * De +25 à +31 = 16 + (9 à 15) : utilise les 4 bits de poids
     faible comme logarithme binaire de la taille du tampon, tout en
     incluant une entête **gzip** et une somme de contrôle finale.

   *memlevel* controls the amount of memory used for internal
   compression state. Valid values range from "1" to "9". Higher
   values using more memory, but are faster and produce smaller
   output. The default is 8.

   *strategy* is used to tune the compression algorithm. Possible
   values are "Z_DEFAULT_STRATEGY", "Z_FILTERED", and
   "Z_HUFFMAN_ONLY". The default is "Z_DEFAULT_STRATEGY".

zlib.crc32(data[, value])

   Computes a CRC (Cyclic Redundancy Check)  checksum of *data*. If
   *value* is present, it is used as the starting value of the
   checksum; otherwise, a fixed default value is used.  This allows
   computing a running checksum over the concatenation of several
   inputs.  The algorithm is not cryptographically strong, and should
   not be used for authentication or digital signatures.  Since the
   algorithm is designed for use as a checksum algorithm, it is not
   suitable for use as a general hash algorithm.

   This function always returns an integer object.

Note: To generate the same numeric value across all Python versions
  and platforms use crc32(data) & 0xffffffff.  If you are only using
  the checksum in packed binary format this is not necessary as the
  return value is the correct 32bit binary representation regardless
  of sign.

Modifié dans la version 2.6: The return value is in the range [-2**31,
2**31-1] regardless of platform.  In older versions the value would be
signed on some platforms and unsigned on others.

Modifié dans la version 3.0: The return value is unsigned and in the
range [0, 2**32-1] regardless of platform.

zlib.decompress(string[, wbits[, bufsize]])

   Decompresses the data in *string*, returning a string containing
   the uncompressed data.  The *wbits* parameter depends on the format
   of *string*, and is discussed further below. If *bufsize* is given,
   it is used as the initial size of the output buffer.  Raises the
   "error" exception if any error occurs.

   L’argument *wbits* contrôle la taille du tampon d’historique («
   *window size* ») utilisé lors de la compression, et si un en-tête
   et un bloc final sont attendus. Similaire au paramètre de
   "compressobj()", mais accepte une gamme plus large de valeurs :

   * De +8 à +15 : logarithme binaire pour la taille du tampon.
     L’entrée doit contenir un en-tête et un bloc *zlib*.

   * 0 : détermine automatiquement la taille du tampon à partir de l
     ’en-tête *zlib*. Géré uniquement depuis *zlib* 1.2.3.5.

   * De "-8" à "-15" : utilise la valeur absolue de *wbits* comme
     logarithme binaire pour la taille du tampon. L’entrée doit être
     un flux brut, sans en-tête ni bloc final.

   * De +24 à +31 = 16 + (8 à 15) : utilise les 4 de poids faible
     comme logarithme binaire pour la taille du tampon. L’entrée doit
     contenir un en-tête *gzip* et son bloc final.

   * De +40 à +47 = 32 + (8 à 15) : utilise les 4 bits de poids
     faible comme logarithme binaire pour la taille du tampon, et
     accepte automatiquement les formats *zlib* ou *gzip*.

   When decompressing a stream, the window size must not be smaller
   than the size originally used to compress the stream; using a too-
   small value may result in an "error" exception. The default *wbits*
   value is 15, which corresponds to the largest window size and
   requires a zlib header and trailer to be included.

   *bufsize* is the initial size of the buffer used to hold
   decompressed data.  If more space is required, the buffer size will
   be increased as needed, so you don’t have to get this value exactly
   right; tuning it will only save a few calls to "malloc()".  The
   default size is 16384.

zlib.decompressobj([wbits])

   Renvoie un objet « décompresseur », à utiliser pour décompresser
   des flux de données qui ne rentrent pas entièrement en mémoire.

   Le paramètre *wbits* contrôle la taille du tampon, et détermine
   quel format d’en-tête et de bloc sont prévus.  Il a la même
   signification que décrit pour decompress().

Les objets de compression gèrent les méthodes suivantes :

Compress.compress(string)

   Compress *string*, returning a string containing compressed data
   for at least part of the data in *string*.  This data should be
   concatenated to the output produced by any preceding calls to the
   "compress()" method.  Some input may be kept in internal buffers
   for later processing.

Compress.flush([mode])

   All pending input is processed, and a string containing the
   remaining compressed output is returned.  *mode* can be selected
   from the constants "Z_SYNC_FLUSH",  "Z_FULL_FLUSH",  or
   "Z_FINISH", defaulting to "Z_FINISH".  "Z_SYNC_FLUSH" and
   "Z_FULL_FLUSH" allow compressing further strings of data, while
   "Z_FINISH" finishes the compressed stream and  prevents compressing
   any more data.  After calling "flush()" with *mode* set to
   "Z_FINISH", the "compress()" method cannot be called again; the
   only realistic action is to delete the object.

Compress.copy()

   Renvoie une copie de l’objet « compresseur ».  Utile pour
   compresser efficacement un ensemble de données qui partagent un
   préfixe initial commun.

   Nouveau dans la version 2.5.

Decompression objects support the following methods, and two
attributes:

Decompress.unused_data

   A string which contains any bytes past the end of the compressed
   data. That is, this remains """" until the last byte that contains
   compression data is available.  If the whole string turned out to
   contain compressed data, this is """", the empty string.

   The only way to determine where a string of compressed data ends is
   by actually decompressing it.  This means that when compressed data
   is contained part of a larger file, you can only find the end of it
   by reading data and feeding it followed by some non-empty string
   into a decompression object’s "decompress()" method until the
   "unused_data" attribute is no longer the empty string.

Decompress.unconsumed_tail

   A string that contains any data that was not consumed by the last
   "decompress()" call because it exceeded the limit for the
   uncompressed data buffer.  This data has not yet been seen by the
   zlib machinery, so you must feed it (possibly with further data
   concatenated to it) back to a subsequent "decompress()" method call
   in order to get correct output.

Decompress.decompress(string[, max_length])

   Decompress *string*, returning a string containing the uncompressed
   data corresponding to at least part of the data in *string*.  This
   data should be concatenated to the output produced by any preceding
   calls to the "decompress()" method.  Some of the input data may be
   preserved in internal buffers for later processing.

   If the optional parameter *max_length* is non-zero then the return
   value will be no longer than *max_length*. This may mean that not
   all of the compressed input can be processed; and unconsumed data
   will be stored in the attribute "unconsumed_tail". This string must
   be passed to a subsequent call to "decompress()" if decompression
   is to continue.  If *max_length* is not supplied then the whole
   input is decompressed, and "unconsumed_tail" is an empty string.

Decompress.flush([length])

   All pending input is processed, and a string containing the
   remaining uncompressed output is returned.  After calling
   "flush()", the "decompress()" method cannot be called again; the
   only realistic action is to delete the object.

   Le paramètre optionnel *length* définit la taille initiale du
   tampon de sortie.

Decompress.copy()

   Renvoie une copie du décompresseur. Vous pouvez l’utiliser pour
   sauvegarder l’état de la décompression en cours, afin de pouvoir
   revenir rapidement à cet endroit plus tard.

   Nouveau dans la version 2.5.

Voir aussi:

  Module "gzip"
     Lire et écrire des fichiers au format **gzip**.

  http://www.zlib.net
     Page officielle de la bibliothèque *zlib*.

  http://www.zlib.net/manual.html
     La documentation de *zlib* explique le sens et l’utilisation des
     nombreuses fonctions fournies par la bibliothèque.
