# 13.2. `gzip` — Support pour les fichiers gzip

Code source : Lib/gzip.py

Ce module fournit une interface simple pour compresser et décompresser des fichiers tout comme le font les programmes GNU gzip et gunzip.

La compression de données est fournie par le module `zlib`.

Le module `gzip` fournit la classe `GzipFile` ainsi que les fonctions pratiques `open()`, `compress()` et `decompress()`. La classe `GzipFile` lit et écrit des fichiers au format gzip, compressant et décompressant automatiquement les données pour qu’elles aient l’apparence d’un objet file object ordinaire.

Notez que les formats de fichier supplémentaires qui peuvent être décompressés par les programmes gzip et gunzip, comme ceux produits par le programmes compress et pack, ne sont pas gérés par ce module.

Le module définit les éléments suivants :

`gzip.``open`(filename, mode='rb', compresslevel=9, encoding=None, errors=None, newline=None)

  Ouvre un fichier compressé en gzip en mode binaire ou texte, renvoie un objet file object.

  L’argument filename peut être un nom de fichier (un objet `str` ou `bytes`) ou un objet fichier existant que l’on peut lire, ou où l’on peut écrire.

  L’argument mode peut-être `'r'`, `'rb'`, `'a'`, `'ab'`, `'w'`, `'wb'`, `'x'` ou `'xb'` pour le mode binaire ou `'rt'`, `'at'`, `'wt'`, ou `'xt'` pour le mode texte. Le mode par défaut est `'rb'`.

  L’argument compresslevel est un entier de 0 à 9, comme pour le constructeur de la classe `GzipFile`.

  En mode binaire, cette fonction est équivalente au constructeur de la classe `GzipFile` : `GzipFile(filename, mode, compresslevel)`. Dans ce cas, les arguments encoding, errors et newline ne doivent pas être fournis.

  En mode texte, un objet `GzipFile` est créé et empaqueté dans une instance de `io.TextIOWrapper` avec l’encodage, la gestion d’erreur et les fins de ligne spécifiés.

  Modifié dans la version 3.3: Ajout de la prise en charge de filename en tant qu’objet file, du mode texte et des arguments encoding, errors et newline.

  Modifié dans la version 3.4: Ajout de la prise en charge des modes `'x'`, `'xb'` et `'xt'`.

  Modifié dans la version 3.6: Accepte un path-like object.

class `gzip.``GzipFile`(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)

  Constructeur de la classe `GzipFile` qui simule la plupart des méthodes d’un objet file object à l’exception de la méthode `truncate()`. Au moins un des arguments fileobj et filename doit avoir une valeur non triviale.

  La nouvelle instance de classe est basée sur fileobj qui peut être un fichier usuel, un objet `io.BytesIO` ou tout autre objet qui simule un fichier. fileobj est par défaut à None, dans ce cas filename est ouvert afin de fournir un objet fichier.

  Quand fileobj n’est pas à `None`, l’argument filename est uniquement utilisé pour être inclus dans l’entête du fichier gzip, qui peut inclure le nom original du fichier décompressé. Il est par défaut défini avec le nom de fichier de fileobj s’il est discernable, sinon il est par défaut défini à une chaîne de caractères vide et dans ce cas le nom du fichier orignal n’est pas inclus dans l’entête.

  L’argument mode peut-être `'r'`, `'rb'`, `'a'`, `'ab'`, `'w'`, `'wb'`, `'x'`, ou `'xb'`, selon que le fichier va être lu ou écrit. Par défaut prend la valeur du mode de fileobj si discernable ; sinon, la valeur par défaut est `'rb'`.

  Notez que le fichier est toujours ouvert en mode binaire. Pour ouvrir un fichier compressé en mode texte, utilisez la fonction `open()` (ou empaquetez votre classe `GzipFile` avec un `io.TextIOWrapper`).

  L’argument compresslevel est un entier de `0` à `9` contrôlant le niveau de compression,``1`` est le plus rapide et produit la compression la plus faible et `9` est le plus rapide et produit la compression la plus élevée. `0` désactive la compression. Par défaut à `9`.

  L’argument mtime est un timestamp numérique optionnel à écrire dans le champ de date de dernière modification du flux durant la compression. Il ne doit être défini qu’en mode compression. S’il est omis ou `None`, la date courante est utilisée. Voir l’attribut `mtime` pour plus de détails.

  Appeler la méthode `close()` d’un objet `GzipFile` ne ferme pas fileobj, puisque vous pourriez avoir besoin d’ajouter des informations après les données compressées. Cela vous permet aussi de passer un objet `io.BytesIO` ouvert en écriture en tant que fileobj et récupérer le tampon mémoire final en utilisant la méthode `getvalue()` de l’objet `io.BytesIO`.

  :La classe `GzipFile` implémente l’interface `io.BufferedIOBase`, incluant l’itération, la déclaration `with`. La méthode `truncate()` est la seule non implémentée.

  La classe `GzipFile` fournit aussi la méthode et l’attribut suivant :

  `peek`(n)

    Lit n octets non compressés sans avancer la position dans le fichier. Au plus une seule lecture sur le flux compressé est faite pour satisfaire l’appel. Le nombre d’octets retournés peut être supérieur ou inférieur au nombre demandé.

    Note

    Bien que l’appel à `peek()` ne change pas la position dans le fichier de l’objet `GzipFile`, il peut changer la position de l’objet de fichier sous-jacent (par exemple, si l’instance de `GzipFile` a été construite avec le paramètre fileobj).

    Nouveau dans la version 3.2.

  `mtime`

    Lors de la décompression, la valeur du champ de date de dernière modification dans le dernier en-tête lu peut être lue à partir de cet attribut, comme un entier. La valeur initiale avant lecture d’un en-tête est `None`.

    Tous les flux compressés en gzip doivent contenir ce champ timestamp. Certains programmes, comme gunzip, utilisent ce timestamp. Ce format est le même que la valeur retour de `time.time()` et l’attribut `st_mtime` de l’objet retourné par `os.stat()`.

  Modifié dans la version 3.1: Ajout de la prise en charge du mot-clef `with`, ainsi que de l’argument mtime du constructeur et de l’attribut `mtime`.

  Modifié dans la version 3.2: Ajout de la prise en charge des fichiers non navigables ou commençant par des octets nuls.

  Modifié dans la version 3.3: La méthode `io.BufferedIOBase.read1()` est désormais implémentée.

  Modifié dans la version 3.4: Ajout de la prise en charge des modes `'x'` et `'xb'`.

  Modifié dans la version 3.5: Ajout de la prise en charge de l’écriture d’objets bytes-like objects arbitraires. La méthode `read()` accepte désormais un argument de valeur `None`.

  Modifié dans la version 3.6: Accepte un path-like object.

`gzip.``compress`(data, compresslevel=9)

  Compresse les données data, renvoie un objet `bytes` contenant les données compressées. L’argument compresslevel a la même signification que dans le constructeur de la classe `GzipFile` ci-dessus.

  Nouveau dans la version 3.2.

`gzip.``decompress`(data)

  Décompresse les données data, retourne un objet `bytes` contenant les données décompressées.

  Nouveau dans la version 3.2.

## 13.2.1. Exemples d’utilisation

Exemple montrant comment lire un fichier compressé :

    import gzip
    with gzip.open('/home/joe/file.txt.gz', 'rb') as f:
        file_content = f.read()

Exemple montrant comment créer un fichier GZIP :

    import gzip
    content = b"Lots of content here"
    with gzip.open('/home/joe/file.txt.gz', 'wb') as f:
        f.write(content)

Exemple montrant comment compresser dans un GZIP un fichier existant :

    import gzip
    import shutil
    with open('/home/joe/file.txt', 'rb') as f_in:
        with gzip.open('/home/joe/file.txt.gz', 'wb') as f_out:
            shutil.copyfileobj(f_in, f_out)

Exemple montrant comment compresser dans un GZIP un binaire dans une chaîne :

    import gzip
    s_in = b"Lots of content here"
    s_out = gzip.compress(s_in)

Voir aussi

Module `zlib`

  Le module de compression de données de base nécessaire pour gérer le format de fichier gzip.