Python3 write gzip file - memoryview: a bytes-like object is required, not 'str'
you can convert it to bytes like this.
import gzip
with gzip.open(filename, 'wb') as fd:
fd.write('blah blah blah'.encode('utf-8'))
print
is a relatively complex function. It writes str
to a file but not the str
that you pass, it writes the str
that is the result of rendering the parameters.
If you have bytes already, you can use fd.write(bytes)
directly and take care of adding a newline if you need it.
If you don't have bytes, make sure fd
is opened to receive text.
For me, changing the gzip flag to 'wt' did the job. I could write the original string, without "byting" it. (tested on python 3.5, 3.7 on ubuntu 16).
From python 3 gzip doc - quoting: "... The mode argument can be any of 'r', 'rb', 'a', 'ab', 'w', 'wb', 'x' or 'xb' for binary mode, or 'rt', 'at', 'wt', or 'xt' for text mode..."
import gzip
filename = 'output.gz'
opener = gzip.open if filename.endswith('.gz') else open
with opener(filename, 'wt') as fd:
print('blah blah blah', file=fd)
!zcat output.gz
> blah blah blah