leer - python csv writer example
Python3: escribir archivos csv (6)
Como se documented en una footnote al footnote :
csv.writer(csvfile, dialect=''excel'', **fmtparams)
Si csvfile es un objeto de archivo, se debe abrir con newline = ''''.
Si newline = '''' no se especifica, las nuevas líneas incrustadas dentro de los campos entrecomillados no se interpretarán correctamente, y en las plataformas que usan / r / n alineaciones en escribir se agregará un / r / n adicional . Siempre debería ser seguro especificar newline = '''', ya que el módulo csv realiza su propio manejo de línea nueva (universal).
La siguiente variante funciona en Linux y Windows:
spamWriter = csv.writer(open(''eggs.csv'', ''wb''), delimiter='' '', quotechar=''|'',
quoting=csv.QUOTE_MINIMAL, newline='''')
spamWriter.writerow([''Spam''] * 5 + [''Baked Beans''])
spamWriter.writerow([''Spam'', ''Lovely Spam'', ''Wonderful Spam''])
Estoy tratando de usar Python 3.2 en una computadora con Windows para escribir un archivo CSV simple, sin embargo, no estoy teniendo suerte. De la documentación del módulo csv para Python 3.2 :
>>> import csv
>>> spamWriter = csv.writer(open(''eggs.csv'', ''w''), delimiter='' '',
... quotechar=''|'', quoting=csv.QUOTE_MINIMAL)
>>> spamWriter.writerow([''Spam''] * 5 + [''Baked Beans''])
>>> spamWriter.writerow([''Spam'', ''Lovely Spam'', ''Wonderful Spam''])
produce un archivo con cada línea terminada por la secuencia de bytes /r/r/n
, por lo que parece que cada línea tiene una línea vacía adicional cuando la abre con, por ejemplo, MS Excel. Este no es un "archivo CSV".
Tenga en cuenta que si pruebo el mismo ejemplo para Python 2.7 en Python 3.2 (donde la gran diferencia es ''w''
vs ''wb''
para el modo de archivo), spamWriter.writerow
un error cuando intento spamWriter.writerow
:
Rastreo (llamada más reciente): Archivo "", línea 1, en TypeError: ''str'' no es compatible con la interfaz del búfer
¿Cómo escribo un archivo CSV simple de Python 3.2 en una computadora con Windows?
Esto funcionará tanto en Python 2 como en Python 3:
if sys.version_info >= (3,0,0):
f = open(filename, ''w'', newline='''')
else:
f = open(filename, ''wb'')
La documentación dice que debe usar open(''eggs.csv'', ''w'', newline='''')
Para responder directamente a su pregunta, debe poder utilizar el parámetro de formato de lineterminator :
... así que modificar esta línea debería funcionar (no probado):
>>> spamWriter = csv.writer(open(''eggs.csv'', ''w''), delimiter='' '',
... quotechar=''|'', quoting=csv.QUOTE_MINIMAL, lineterminator=''/n'')
En cuanto a por qué el ejemplo no funciona de fábrica, parece un error para mí.
Resolví este error porque estaba moviendo uno de mis códigos de Python2.6.6 a python3.4.3
Python2.6.6 (estoy tratando de hacer algo de ofuscación en mi archivo csv)
with open( os.path.join(path, name) , ''r'') as mycsvfile:
writer = csv.writer(open(newFilename, ''w''))
Anterior funcionó bien con python2.6.6 pero no funcionó en python3.4.3 ya que estaba obteniendo algunos errores utico-8 cuando intenté ejecutar el archivo python3, así que hice los cambios a continuación Python3.4.4
import codecs
with codecs.open(os.path.join(path, name) , ''r'', encoding=''ISO-8859-1'') as mycsvfile:
writer = csv.writer(open(newFilename, ''w''))
Eso es todo, mi código funciona bien ahora, básicamente python3 no está considerando parte del Unicode y tenemos que usar la importación de codecs para que funcione, espero que ayude ...
[Para Python 2.x] Esta implementación de spamWriter me funciona ...
with open(''assignmentresults.csv'', ''wb'') as csvfile:
spamwriter = csv.writer(csvfile, delimiter='','', quotechar=''|'', quoting=csv.QUOTE_MINIMAL)
spamwriter.writerow(["Hullo", "World"])