1. ホーム
  2. python

[解決済み] TypeError: 'str' はバッファのインタフェースをサポートしていません。

2022-02-03 08:46:37

質問

plaintext = input("Please enter the text you want to compress")
filename = input("Please enter the desired filename")
with gzip.open(filename + ".gz", "wb") as outfile:
    outfile.write(plaintext) 

上記のPythonコードは、私に以下のエラーを与えています。

Traceback (most recent call last):
  File "C:/Users/Ankur Gupta/Desktop/Python_works/gzip_work1.py", line 33, in <module>
    compress_string()
  File "C:/Users/Ankur Gupta/Desktop/Python_works/gzip_work1.py", line 15, in compress_string
    outfile.write(plaintext)
  File "C:\Python32\lib\gzip.py", line 312, in write
    self.crc = zlib.crc32(data, self.crc) & 0xffffffff
TypeError: 'str' does not support the buffer interface

解決方法は?

Python3xを使用している場合 string は Python 2.x と同じ型ではないので、byte にキャストする (エンコードする) 必要があります。

plaintext = input("Please enter the text you want to compress")
filename = input("Please enter the desired filename")
with gzip.open(filename + ".gz", "wb") as outfile:
    outfile.write(bytes(plaintext, 'UTF-8'))

また、以下のような変数名は使用しないでください。 string または file は、モジュール名や関数名である。

編集部 @Tom

はい、非ASCIIテキストも圧縮/解凍されます。私はポーランド文字をUTF-8エンコーディングで使っています。

plaintext = 'Polish text: ąćęłńóśźżĄĆĘŁŃÓŚŹŻ'
filename = 'foo.gz'
with gzip.open(filename, 'wb') as outfile:
    outfile.write(bytes(plaintext, 'UTF-8'))
with gzip.open(filename, 'r') as infile:
    outfile_content = infile.read().decode('UTF-8')
print(outfile_content)