Lire et écrire des fichiers compressés en Python

Vous avez besoin de lire ou d’écrire des données dans un fichier avec compression gzip ou bz2.

Les modules gzip et bz2 permettent de travailler facilement avec de tels fichiers. Les deux modules fournissent une implémentation alternative de la fonction open() qui peut être utilisée à cette fin.

Par exemple, pour lire des fichiers compressés sous forme de texte, procédez comme suit:

# compression gzip
import gzip
with gzip.open('fichier.gz', 'rt') as f:
   texte = f.read()

# compression bz2
import bz2
with bz2.open('fichier.bz2', 'rt') as f:
   texte = f.read()

 

De même, pour écrire des données compressées, faites ceci:

# compression gzip
import gzip
with gzip.open('fichier.gz', 'wt') as f:
   f.write(texte)

# compression bz2
import bz2
with bz2.open('fichier.bz2', 'wt') as f:
   f.write(texte)

 

Comme indiqué, toutes les E/S utiliseront du texte et effectueront un encodage/décodage Unicode. Si vous voulez travailler avec des données binaires à la place, utilisez l’un des modes fichier rb ou wb.

Dans la plupart des cas, la lecture ou l’écriture de données compressées est simple. Cependant, sachez que le choix du bon mode de fichier est d’une importance capitale.

Si vous ne spécifiez pas de mode, le mode par défaut est binaire, ce qui interrompt les programmes qui s’attendent à recevoir du texte.

gzip.open() et bz2.open() acceptent les mêmes paramètres que la fonction intégrée open(), y compris l’encodage, les erreurs, les nouvelles lignes, etc.

Lors de l’écriture de données compressées, le niveau de compression peut être spécifié en spécifiant l’argument compresslevel. Par exemple:

with gzip.open('fichier.gz', 'wt', compresslevel=5) as f:
   f.write(texte)

 

Le niveau par défaut est 9, qui indique le niveau de compression le plus élevé. Les niveaux inférieurs offrent de meilleures performances, mais pas autant de compression.

Enfin, une fonctionnalité peu connue de gzip.open() et bz2.open() est qu’ils peuvent être superposés à un fichier existant ouvert en mode binaire. Par exemple, cela fonctionne:

import gzip
f = open('fichier.gz', 'rb')
with gzip.open(f, 'rt') as g:
   texte = g.read()

 

Ceci permet aux modules gzip et bz2 de travailler avec divers objets de type fichier tels que des sockets, des pipes et des fichiers en mémoire.

LAISSER UN COMMENTAIRE

Please enter your comment!
Please enter your name here