write exportar example datos crear python csv xlrd

exportar - Crear un archivo.csv con valores de una lista de Python



python csv writer example (10)

Libreta Jupyter

Digamos que tu lista es A

Luego puede codificar el siguiente anuncio, lo tendrá como un archivo csv (¡solo columnas!)

R="/n".join(A) f = open(''Columns.csv'',''w'') f.write(R) f.close()

Estoy tratando de crear un archivo .csv con los valores de una lista de Python. Cuando imprimo los valores en la lista, todos son unicode (?), Es decir, se ven algo como esto

[u''value 1'', u''value 2'', ...]

Si repito los valores en la lista, es decir, for v in mylist: print v , parecen ser texto sin formato.

Y puedo poner un , entre cada uno con print '',''.join(mylist)

Y puedo enviar a un archivo, es decir,

myfile = open(...) print >>myfile, '',''.join(mylist)

Pero quiero dar salida a un CSV y tener delimitadores alrededor de los valores en la lista, por ejemplo

"value 1", "value 2", ...

No puedo encontrar una manera fácil de incluir los delimitadores en el formateo, por ejemplo, he intentado con la declaración de join . ¿Cómo puedo hacer esto?


Aquí hay otra solución que no requiere el módulo csv .

print '', ''.join([''"''+i+''"'' for i in myList])

Ejemplo:

>>> myList = [u''value 1'', u''value 2'', u''value 3''] >>> print '', ''.join([''"''+i+''"'' for i in myList]) "value 1", "value 2", "value 3"

Sin embargo, si la lista inicial contiene algunos ", no se escapará. Si es necesario, es posible llamar a una función para escapar de esa manera:

print '', ''.join([''"''+myFunction(i)+''"'' for i in myList])


Aquí hay una versión segura de Alex Martelli:

import csv with open(''filename'', ''wb'') as myfile: wr = csv.writer(myfile, quoting=csv.QUOTE_ALL) wr.writerow(mylist)


La mejor opción que he encontrado fue usar savetxt desde el módulo numpy :

import numpy as np np.savetxt("file_name.csv", data1, delimiter=",", fmt=''%s'', header=header)

En caso de que tenga varias listas que deben apilarse

np.savetxt("file_name.csv", np.column_stack((data1, data2)), delimiter=",", fmt=''%s'', header=header)


Para otro enfoque, puede usar DataFrame en pandas : y puede volcar fácilmente los datos a csv al igual que el siguiente código:

import pandas df = pandas.DataFrame(data={"col1": list_1, "col2": list_2}) df.to_csv("./file.csv", sep='','',index=False)


Podría usar el método string.join en este caso.

Dividir unas pocas líneas para mayor claridad: esta es una sesión interactiva

>>> a = [''a'',''b'',''c''] >>> first = ''", "''.join(a) >>> second = ''"%s"'' % first >>> print second "a", "b", "c"

O como una sola línea

>>> print (''"%s"'') % ''", "''.join(a) "a", "b", "c"

Sin embargo, puede tener un problema si sus cadenas tienen citas incrustadas. Si este es el caso, tendrá que decidir cómo escapar de ellos.

El docs.python.org/library/csv.html puede encargarse de todo esto por usted, lo que le permite elegir entre varias opciones de cotización (todos los campos, solo campos con comillas y separadores, solo campos no numéricos, etc.) y cómo controlar dichos caracteres (comillas dobles, o cadenas escapadas). Si sus valores son simples, string.join probablemente estará bien, pero si tiene que administrar muchos casos extremos, use el módulo disponible.


Utilice el módulo csv de python para leer y escribir archivos csv por comas o tabuladores. El módulo csv es preferido porque le da un buen control sobre las cotizaciones.

Por ejemplo, aquí está el ejemplo trabajado para usted:

import csv data = ["value %d" % i for i in range(1,4)] out = csv.writer(open("myfile.csv","w"), delimiter='','',quoting=csv.QUOTE_ALL) out.writerow(data)

Produce:

"value 1","value 2","value 3"


debe usar el módulo CSV con seguridad, pero lo más probable es que necesite escribir unicode. Para aquellos que necesitan escribir unicode, esta es la clase de la página de ejemplo, que puede usar como un módulo de utilidad:

import csv, codecs, cStringIO class UTF8Recoder: """ Iterator that reads an encoded stream and reencodes the input to UTF-8 """ def __init__(self, f, encoding): self.reader = codecs.getreader(encoding)(f) def __iter__(self): return self def next(self): return self.reader.next().encode("utf-8") class UnicodeReader: """ A CSV reader which will iterate over lines in the CSV file "f", which is encoded in the given encoding. """ def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds): f = UTF8Recoder(f, encoding) self.reader = csv.reader(f, dialect=dialect, **kwds) def next(self): row = self.reader.next() return [unicode(s, "utf-8") for s in row] def __iter__(self): return self class UnicodeWriter: """ A CSV writer which will write rows to CSV file "f", which is encoded in the given encoding. """ def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds): # Redirect output to a queue self.queue = cStringIO.StringIO() self.writer = csv.writer(self.queue, dialect=dialect, **kwds) self.stream = f self.encoder = codecs.getincrementalencoder(encoding)() def writerow(self, row): self.writer.writerow([s.encode("utf-8") for s in row]) # Fetch UTF-8 output from the queue ... data = self.queue.getvalue() data = data.decode("utf-8") # ... and reencode it into the target encoding data = self.encoder.encode(data) # write to the target stream self.stream.write(data) # empty queue self.queue.truncate(0) def writerows(self, rows): for row in rows: self.writerow(row)


import csv with open("file.csv", ''w'') as myfile: wr = csv.writer(myfile, quoting=csv.QUOTE_ALL) wr.writerow(mylist)


import csv with open(..., ''wb'') as myfile: wr = csv.writer(myfile, quoting=csv.QUOTE_ALL) wr.writerow(mylist)