портативный способ записи CSV-файла в Python 2 или Python 3
На моем компьютере с 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 без особого взлома.
Есть ли способ лучше?