В моем окне Windows я обычно делал это в python 2, чтобы написать файл csv:
import csv
f = open("out.csv","wb")
cr = csv.writer(f,delimiter=';')
cr.writerow(["a","b","c"])
f.close()
Теперь, когда python 3 запрещает писать текстовые файлы как двоичные, этот фрагмент кода больше не работает. Это работает:
import csv
f = open("out.csv","w",newline='')
cr = csv.writer(f,delimiter=';')
cr.writerow(["a","b","c"])
f.close()
Проблема: параметр newline
неизвестен Python 2.
Конечно, опускание новой строки приводит к созданию файла csv со слишком большим количеством символов \r
, поэтому неприемлемым.
В настоящее время я выполняю обратный совместимый процесс для постепенной миграции из python 2 в python 3.5 Во всех моих модулях есть много этих утверждений.
Мое решение заключалось в встраивании кода в пользовательский модуль, а пользовательский модуль возвращал объект-обработчик + объект-автор. Проверка версии python выполняется внутри модуля, что позволяет любому модулю, использующему мой модуль, работать с любой версией python без чрезмерного взлома.
Есть ли лучший способ?