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 parecen a 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 conprint ','.join(mylist)
Y puedo enviar a un archivo, es decir
myfile = open(...)
print >>myfile, ','.join(mylist)
Pero quiero enviar 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 formato, por ejemplo, he intentado a través de la join
declaración. ¿Cómo puedo hacer esto?
Respuestas:
Editar: esto solo funciona con python 2.x.
Para que funcione con python 3.x reemplace
wb
conw
( vea esta respuesta SO )fuente
csv
módulo en 2.x no trata correctamente con unicodes; Consulte la documentación del módulo para obtener ejemplos sobre cómo lidiar con esto. docs.python.org/library/csv.htmlTypeError: 'str' does not support the buffer interface
.'w'
como aquí: stackoverflow.com/questions/34283178/…Aquí hay una versión segura de Alex Martelli:
fuente
with
, asegurándose de que el archivo esté cerrado cuando terminewr.writerow(my_list)
dentro del bucle?Para otro enfoque, puede usar DataFrame en pandas : y puede volcar fácilmente los datos a csv al igual que el código a continuación:
fuente
La mejor opción que encontré fue usar
savetxt
desde elnumpy
módulo :En caso de que tenga varias listas que deben apilarse
fuente
Utilice el
csv
módulo de Python para leer y escribir comas o archivos delimitados por tabuladores. Se prefiere el módulo csv porque le da un buen control sobre las citas.Por ejemplo, aquí está el ejemplo trabajado para usted:
Produce:
fuente
out = csv.writer(open("myfile.csv","w"), delimiter=',',quoting=csv.QUOTE_ALL))
llena los datos, sin importar si colocaopen("myfile.csv","w")
o un nuevo archivoopen("myfile2.csv","w")
. Parece que el objeto de salida no puede tratar con el objeto de archivo construido en la ejecución, pero almacena el proceso de salida como un todo. En otras palabras: ¡el objeto de salida almacena el objeto de archivo en la primera ejecución pero solo escribe cuando el objeto de archivo ya existe! Vea la solución correcta a continuación @Saurabh AdhikaryPodría usar el método string.join en este caso.
Divida en algunas líneas para mayor claridad: aquí hay una sesión interactiva
O como una sola línea
Sin embargo, puede tener un problema si sus cadenas tienen comillas incrustadas. Si este es el caso, deberá decidir cómo escapar de ellos.
El módulo CSV puede encargarse de todo esto por usted, permitiéndole 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 eliminar los caracteres de control (comillas dobles, o cuerdas escapadas). Si sus valores son simples, string.join probablemente estará bien, pero si tiene que administrar muchos casos extremos, use el módulo disponible.
fuente
Esta solución suena loca, pero funciona sin problemas como la miel
El archivo está siendo escrito por csvwriter, por lo tanto, las propiedades de csv se mantienen, es decir, separadas por comas. El delimitador ayuda en la parte principal al mover elementos de la lista a la siguiente línea, cada vez.
fuente
data = [["value %d" % i, "value %d" % (i+1)] for i in range(1,4)] with open("myfile.txt","w") as f: out = csv.writer(f, quoting=csv.QUOTE_ALL, delimiter='\n') out.writerow([';'.join(x) for x in data])
Para crear y escribir en un archivo csv
El siguiente ejemplo muestra cómo crear y escribir un archivo csv. para crear un escritor de archivos dinámico, necesitamos importar un paquete de importación CSV , luego debemos crear una instancia del archivo con la referencia del archivo Ej: - con open ("D: \ sample.csv", "w", newline = "" ) como file_writer
aquí si el archivo no existe con el directorio de archivos mencionado, entonces python creará un mismo archivo en el directorio especificado, y "w" representa escritura, si desea leer un archivo, reemplace "w" con "r" o para agregar al archivo existente y luego "a". newline = "" especifica que elimina una fila vacía adicional por cada vez que crea una fila, por lo que para eliminar la fila vacía usamos newline = "", creamos algunos nombres de campo (nombres de columna) usando list like fields = ["Names", "Age "," Class "] , luego se aplica a la instancia de escritor como writer = csv.DictWriter (file_writer, fieldnames = fields) aquí usando Dictionary writer y asignando nombres de columna, para escribir nombres de columna en csv usamos escritor. , mientras que la escritura de valores de archivo debe pasarse utilizando el método de diccionario, aquí la clave es el nombre de la columna y el valor es su valor clave respectivo
fuente
Cuaderno Jupyter
Digamos que tu lista es
A
Luego puede codificar el siguiente anuncio, lo tendrá como un archivo csv (¡solo columnas!)
fuente
seguramente debe usar el módulo CSV, 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 módulo util:
fuente
Aquí hay otra solución que no requiere el
csv
módulo.Ejemplo:
Sin embargo, si la lista inicial contiene algunos ", no se escaparán. Si es necesario, es posible llamar a una función para escapar así:
fuente