web-dev-qa-db-ja.com

gzipファイルへのテキストの書き込み

ブログや他のスレッドにあるチュートリアルや例に従って、.gzファイルに書き込む方法は、バイナリモードで開き、文字列をそのまま書き込むことです。

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

私はそれを試しました、そして次の例外を得ました:

  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'

だから私はテキストモードでファイルを開こうとしました:

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

しかし、私は同じエラーを受け取りました:

  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'

この問題はPython3でどのように対処できますか?

15
AgvaniaRekuva

mode='wb'

バイナリモードで開いたファイルに書き込むときは、文字列ではなくバイトを書き込む必要があります。 str.encodeを使用して文字列をエンコードします。

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

mode='wt'

(OPが見つかりました)または、wt(explicittext)モードでファイルを開いたときに、ファイルに文字列を書き込むことができます。

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

documentation には、使用に関する便利な例がいくつかあります。

13
cs95