ファイルを書きたいと思います。ファイルの名前に基づいて、gzip
モジュールで圧縮されている場合とされていない場合があります。私のコードは次のとおりです。Python3書き込みgzipファイル - memoryview: 'str'ではなくバイト様オブジェクトが必要です
import gzip
filename = 'output.gz'
opener = gzip.open if filename.endswith('.gz') else open
with opener(filename, 'wb') as fd:
print('blah blah blah'.encode(), file=fd)
書き込み可能なファイルをバイナリモードで開き、書き込み対象の文字列をエンコードしています。しかし、次のエラーが表示されます。
File "/usr/lib/python3.5/gzip.py", line 258, in write
data = memoryview(data)
TypeError: memoryview: a bytes-like object is required, not 'str'
なぜ私のオブジェクトはバイトではありませんか? 'w'
でファイルを開き、エンコードのステップをスキップすると同じエラーが発生します。ファイル名から'.gz'
を削除すると、同じエラーが表示されます。私はUbuntuの16.04
これは 'print(str( 'blah blah blah'.encode())、file = fd)'と同じです。 Pythonはbytesオブジェクトの文字列表現を書き込もうとしています。 – tdelaney