TypeError: 'str' does not support the buffer interface
If you use Python3x then string
is not the same type as for Python 2.x, you must cast it to bytes (encode it).
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'))
Also do not use variable names like string
or file
while those are names of module or function.
EDIT @Tom
Yes, non-ASCII text is also compressed/decompressed. I use Polish letters with UTF-8 encoding:
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)
There is an easier solution to this problem.
You just need to add a t
to the mode so it becomes wt
. This causes Python to open the file as a text file and not binary. Then everything will just work.
The complete program becomes this:
plaintext = input("Please enter the text you want to compress")filename = input("Please enter the desired filename")with gzip.open(filename + ".gz", "wt") as outfile: outfile.write(plaintext)