forma portátil de escribir un archivo csv en python 2 o python 3
En mi cuadro de Windows, generalmente hice esto en python 2 para escribir un archivo csv:
import csv
f = open("out.csv","wb")
cr = csv.writer(f,delimiter=';')
cr.writerow(["a","b","c"])
f.close()
Ahora que Python 3 prohíbe escribir archivos de texto como binarios, ese código ya no funciona. Eso funciona:
import csv
f = open("out.csv","w",newline='')
cr = csv.writer(f,delimiter=';')
cr.writerow(["a","b","c"])
f.close()
El problema es:newline
El parámetro es desconocido para Python 2.
Por supuesto, omitir los resultados de la nueva línea en un archivo csv con demasiados\r
caracteres, por lo que no es aceptable.
Actualmente estoy realizando un proceso compatible con versiones anteriores para migrar progresivamente de python 2 a python 3.5. Hay muchas de esas declaraciones en todos mis módulos.
Mi solución fue incrustar el código en un módulo personalizado, y el módulo personalizado devuelve el controlador de archivo + objeto de escritura. Se realiza una verificación de la versión de Python dentro del módulo, lo que permite que cualquier módulo que use mi módulo funcione en cualquier versión de Python sin demasiados hackers.
¿Hay una mejor manera?