Я хочу написать файл. Основываясь на имени файла, это может быть или не быть сжато с помощью модуля 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'
из имени файла.
Я использую Python3.5 на Ubuntu 16.04
Его также как 'print (str ('blah blah blah'.encode()), file = fd)'. python пытается написать строковое представление объекта bytes. – tdelaney