Я пытаюсь перенести некоторый код из Python 2.7 в Python 3. Инструмент 2to3 отлично работает для базового синтаксиса и изменений пакета, но теперь мы сталкиваемся с некоторыми странными побочными эффектами.Как использовать CSV Writers с файлами GZIP в Python 3?
У меня есть следующий блок кода. Он открывает временное имя файла, используя модуль gzip.
f = NamedTemporaryFile(delete=False)
f.close()
fn = f.name + '.gz'
os.rename(f.name, fn)
fz = gzip.open(fn, 'wb')
writer = csv.writer(fz, delimiter='\t', lineterminator=lt)
for row in table:
writer.writerow(row)
fz.close()
Проблема заключается в том, что выполнение этого дает мне следующую ошибку:
File "/usr/local/Cellar/python3/3.4.2_1/Frameworks/Python.framework/Versions/3.4/lib/python3.4/gzip.py", line 343, in write
self.crc = zlib.crc32(data, self.crc) & 0xffffffff
TypeError: 'str' does not support the buffer interface
Я попытался открыть файл GZIP как «ш» вместо «термометра», но безрезультатно. Я предполагаю, что модуль gzip ожидает массив байтов, но CSV Writer не предоставляет или не предоставляет ничего, кроме строки.
Как люди делают это в Python 3?
Редактировать: Следует упомянуть, что этот блок кода выполняется без проблем в Python 2.7.
Возможный дубликат http://stackoverflow.com/questions/7200606/python3-writing-csv-files –
Несомненно, выглядит так, спасибо. Не знаю, почему я не мог найти этот вопрос, когда искал «python 3 csv writer» – WineSoaked
Нет, мой вопрос различен. Это использует CSV Writer для дескриптора файла GZIP. Я получаю следующую ошибку, когда я пытаюсь выполнить 'fz = gzip.open (fn, 'wb', newline = '')': 'Файл '/usr/local/Cellar/python3/3.4.2_1/Frameworks/ Python.framework/Версии/3.4/lib/python3.4/gzip.py ", строка 48, в открытом Повысить ValueError (« Аргумент «новая строка» не поддерживается в двоичном режиме »)' 'ValueError: Argument 'newline' not поддерживается в двоичном режиме ' – WineSoaked