web-dev-qa-db-fra.com

Écrire du texte dans un fichier gzip

Après des tutoriels et des exemples trouvés dans les blogs et dans d'autres fils ici, il semble que la façon d'écrire dans un .gz le fichier est de l'ouvrir en mode binaire et d'écrire la chaîne telle quelle:

import gzip
with gzip.open('file.gz', 'wb') as f:
    f.write('Hello world!')

Je l'ai essayé et j'ai obtenu l'exception suivante:

  File "C:\Users\Tal\Anaconda3\lib\gzip.py", line 258, in write
    data = memoryview(data)
TypeError: memoryview: a bytes-like object is required, not 'str'

J'ai donc essayé d'ouvrir le fichier en mode texte:

import gzip
with gzip.open('file.gz', 'w') as f:
    f.write('Hello world!')

Mais j'ai eu la même erreur:

  File "C:\Users\Tal\Anaconda3\lib\gzip.py", line 258, in write
    data = memoryview(data)
TypeError: memoryview: a bytes-like object is required, not 'str'

Comment résoudre ce problème en Python3?

15
AgvaniaRekuva

mode='wb'

Lorsque vous écrivez dans un fichier ouvert en mode binaire, vous devez écrire des octets, pas une chaîne. Encodez votre chaîne en utilisant str.encode:

with gzip.open('file.gz', 'wb') as f:
    f.write('Hello world!'.encode())

mode='wt'

(trouvé par OP) Alternativement, vous pouvez écrire des chaînes dans votre fichier lorsque vous l'ouvrez en mode wt (texte explicite ):

with gzip.open('file.gz', 'wt') as f:
    f.write('Hello world!')

documentation a quelques exemples pratiques d'utilisation.

13
cs95