Trent
Trent

Reputation: 57

Any ideas how to fix TypeError: 'str' does not support the buffer interface?

I keep getting this error "TypeError: 'str' does not support the buffer interface" Not sure what is going wrong. Any assistance would be great.

import zlib
#User input for sentnce & compression.
sentence = input("Enter the text you want to compress: ")
com = zlib.compress(sentence)
#Opening file to compress user input.
with open("listofwords.txt", "wb") as myfile:
    myfile.write(com)

Upvotes: 0

Views: 569

Answers (1)

jfs
jfs

Reputation: 414235

The error means that you are trying to pass str object (Unicode text) instead of binary data (byte sequence):

>>> import zlib
>>> zlib.compress('')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' does not support the buffer interface

Python 3.5 improves the error message here:

>>> import zlib
>>> zlib.compress('')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: a bytes-like object is required, not 'str'

To save text as binary data, you could encode it using a character encoding. To compress the data, you could use gzip module:

import gzip
import io

with io.TextIOWrapper(gzip.open('sentence.txt.gz', 'wb'),
                      encoding='utf-8') as file:
    print(sentence, file=file)

Upvotes: 3

Related Questions