gzip – Support des fichiers gzip¶
On novembre 24, 2021 by adminCode source : Lib/gzip.py
Ce module fournit une interface simple pour compresser et décompresser des fichiers exactement comme le feraient les programmes GNU gzip et gunzip.
La compression des données est fournie par le module zlib
.
Le module gzip
fournit la classe GzipFile
, ainsi que les fonctions de commoditéopen()
, compress()
et decompress()
.La classe GzipFile
lit et écrit des fichiers au format gzip,en compressant ou décompressant automatiquement les données de façon à ce qu’elles ressemblent à un objet de fichier ordinaire.
Notez que les formats de fichiers supplémentaires qui peuvent être décompressés par les programmesgzip et gunzip, tels que ceux produits parcompress et pack, ne sont pas supportés par ce module.
Le module définit les éléments suivants :
gzip.
open
(nom du fichier, mode=’rb’, compresslevel=9, encodage=None, erreurs=None, nouvelle ligne=None)¶
Ouvrir un fichier compressé par gzip en mode binaire ou texte, en retournant un fileobject.
L’argument filename peut être un nom de fichier réel (un objet str
oubytes
), ou un objet fichier existant à partir duquel lire ou sur lequel écrire.
L’argument mode peut être l’un de 'r'
, 'rb'
, 'a'
, 'ab'
,'w'
, 'wb'
, 'x'
ou 'xb'
pour le mode binaire, ou 'rt'
,'at'
, 'wt'
ou 'xt'
pour le mode texte. Le défaut est 'rb'
.
L’argument compresslevel est un entier de 0 à 9, comme pour le constructeurGzipFile
.
Pour le mode binaire, cette fonction est équivalente au constructeur GzipFile
: GzipFile(filename, mode, compresslevel)
. Dans ce cas, les argumentsencodage, erreurs et nouvelle ligne ne doivent pas être fournis.
Pour le mode texte, un objet GzipFile
est créé, et enveloppé dans une instanceio.TextIOWrapper
avec l’encodage, le comportement de traitement des erreurs et la ou les fins de ligne spécifiés.
Changé dans la version 3.3 : Ajouté le support pour le nom de fichier étant un objet fichier, le support pour le mode texte,et les arguments d’encodage, d’erreurs et de nouvelle ligne.
Changé dans la version 3.4 : Ajout du support pour les modes 'x'
, 'xb'
et 'xt'
.
Changé dans la version 3.6 : Accepte un objet de type chemin.
exceptiongzip.
BadGzipFile
¶
Une exception levée pour les fichiers gzip invalides. Elle hérite de OSError
.EOFError
et zlib.error
peuvent également être levées pour des fichiers gzipfiles invalides.
Nouveau dans la version 3.8.
classegzip.
GzipFile
(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)¶
Constructeur pour la classe GzipFile
, qui simule la plupart des méthodes d’un objet fichier, à l’exception de la méthode truncate()
. Au moins un de fileobj et filename doit recevoir une valeur non triviale.
La nouvelle instance de classe est basée sur fileobj, qui peut être un fichier régulier, un objetio.BytesIO
, ou tout autre objet qui simule un fichier. Il est par défaut None
, auquel cas filename est ouvert pour fournir un fileobject.
Lorsque fileobj n’est pas None
, l’argument filename est uniquement utilisé pour être inclus dans l’en-tête du fichier gzip, qui peut inclure lefilename original du fichier non compressé. Il prend par défaut le nom de fichier de fileobj, s’il est discernable ; sinon, il prend la chaîne vide, et dans ce cas le nom de fichier original n’est pas inclus dans l’en-tête.
L’argument mode peut être l’un des suivants : 'r'
, 'rb'
, 'a'
, 'ab'
, 'w'
,'wb'
, 'x'
ou 'xb'
, selon que le fichier sera lu ou écrit. Le défaut est le mode du fichierobj s’il est discernable ; sinon, le défaut est 'rb'
. Dans les futures versions de Python, le mode de fileobj ne sera pas utilisé. Il est préférable de toujours spécifier le mode pour l’écriture.
Notez que le fichier est toujours ouvert en mode binaire. Pour ouvrir un fichier compressé en mode texte, utilisez open()
(ou enveloppez votre GzipFile
avec unio.TextIOWrapper
).
L’argument compresslevel est un entier de 0
à 9
contrôlant le niveau de compression ; 1
est le plus rapide et produit le moins de compression, et 9
est le plus lent et produit le plus de compression. 0
est sans compression. La valeur par défaut est 9
.
L’argument mtime est un horodatage numérique facultatif à écrire dans le champ de l’heure de dernière modification du flux lors de la compression. Il ne doit être fourni qu’en mode de compression. S’il est omis ou None
, l’heure actuelle est utilisée. Voir l’attribut mtime
pour plus de détails.
Appeler la méthode close()
d’un objet GzipFile
ne ferme pas le fichierobj, puisque vous pourriez souhaiter ajouter plus de matériel après les données compressées. Cela vous permet également de passer un objet io.BytesIO
ouvert pour l’écriture comme fileobj, et de récupérer le tampon de mémoire résultant en utilisant la méthode getvalue()
de l’objetio.BytesIO
.
GzipFile
supporte l’interface io.BufferedIOBase
,y compris l’itération et l’instruction with
. Seule la méthodetruncate()
n’est pas implémentée.
GzipFile
fournit également la méthode et l’attribut suivants :
peek
(n)¶
Lire n octets non compressés sans avancer la position du fichier.Au plus une seule lecture sur le flux compressé est effectuée pour satisfaire l’appel. Le nombre d’octets renvoyés peut être supérieur ou inférieur à celui demandé.
Note
Alors que l’appel peek()
ne change pas la position du fichier du GzipFile
, il peut changer la position de l’objetfichier sous-jacent (par ex. si le GzipFile
a été construit avec le paramètrefileobj).
Nouveau dans la version 3.2.
mtime
¶
Lors de la décompression, la valeur du champ de la dernière heure de modification dans l’en-tête le plus récemment lu peut être lue à partir de cet attribut, comme un nombre entier. La valeur initiale avant la lecture de tout en-tête est None
.
Tous les flux compressés par gzip doivent contenir ce champ d’horodatage. Certains programmes, tels que gunzip, font usage de l’horodatage. Le format est le même que la valeur de retour detime.time()
et l’attribut st_mtime
de l’objet retourné par os.stat()
.
Changé dans la version 3.1 : le support de l’instruction with
a été ajouté, ainsi que l’argument du constructeur themtime et l’attribut mtime
.
Changé dans la version 3.2 : Le support pour les fichiers zéro-padded et unseekable a été ajouté.
Changé dans la version 3.3 : La méthode io.BufferedIOBase.read1()
est maintenant implémentée.
Changé dans la version 3.4 : Ajout de la prise en charge des modes 'x'
et 'xb'
.
Changé dans la version 3.5 : Ajout de la prise en charge de l’écriture d’objets arbitraires de type bytes.La méthode read()
accepte désormais un argument deNone
.
Changé dans la version 3.6 : Accepte un objet de type chemin.
Déprécié depuis la version 3.9 : Ouvrir GzipFile
pour l’écriture sans spécifier l’argument modeargument est déprécié.
gzip.
compress
(data, compresslevel=9, *, mtime=None)¶
Compresser les données, en retournant un objet bytes
contenant les données compressées. compresslevel et mtime ont la même signification que dans le constructeur GzipFile
ci-dessus.
Nouveau dans la version 3.2.
Changé dans la version 3.8 : Ajout du paramètre mtime pour une sortie reproductible.
gzip.
decompress
(data)¶
Décompression des données, renvoyant un objet bytes
contenant les données non compressées.
Nouveau dans la version 3.2.
Exemples d’utilisation¶
Exemple de lecture d’un fichier compressé:
import gzipwith gzip.open('/home/joe/file.txt.gz', 'rb') as f: file_content = f.read()
Exemple de création d’un fichier GZIP compressé:
import gzipcontent = b"Lots of content here"with gzip.open('/home/joe/file.txt.gz', 'wb') as f: f.write(content)
Exemple de compression GZIP d’un fichier existant :
import gzipimport shutilwith 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 de la façon de compresser par GZIP une chaîne binaire:
import gzips_in = b"Lots of content here"s_out = gzip.compress(s_in)
See also
Module zlib
Le module de compression de données de base nécessaire pour supporter le format de fichier gzip.
Interface de ligne de commande¶
Le module gzip
fournit une interface de ligne de commande simple pour compresser des fichiers ordecompress.
Une fois exécuté, le module gzip
conserve le ou les fichiers d’entrée.
Modifié dans la version 3.8 : Ajout d’une nouvelle interface de ligne de commande avec une utilisation.Par défaut, lorsque vous exécuterez la CLI, le niveau de compression par défaut est de 6.
Options de ligne de commande¶
file
¶
Si le fichier n’est pas spécifié, lecture à partir de sys.stdin
.
--fast
¶
Indique la méthode de compression la plus rapide (moins de compression).
--best
¶
Indique la méthode de compression la plus lente (meilleure compression).
-d
,
--decompress
¶
Décompresse le fichier donné.
-h
,
--help
¶
Affiche le message d’aide.
.
Laisser un commentaire