Tengo una lista de diccionarios que se parece a esto:
toCSV = [{'name':'bob','age':25,'weight':200},{'name':'jim','age':31,'weight':180}]
¿Qué debo hacer para convertir esto a un archivo csv que se parece a esto?
name,age,weight
bob,25,200
jim,31,180
python
csv
dictionary
data-conversion
backus
fuente
fuente
Respuestas:
EDITAR: Mi solución anterior no maneja el pedido. Como señaló Wilduck, DictWriter es más apropiado aquí.
fuente
with open('people.csv', 'wb') as f: ...
dict_writer.writeheader()
lugar dedict_writer.writer.writerow(keys)
open('people.csv', 'w')
set().union(*(d.keys() for d in mylist))
para obtener todas las claves de la lista (si tiene algunas que no tienen todas las claves)Esto es cuando tienes una lista de diccionario:
fuente
En Python 3 las cosas son un poco diferentes, pero mucho más simples y menos propensas a errores. Es una buena idea decirle al CSV que su archivo debe abrirse con
utf8
codificación, ya que hace que los datos sean más portátiles para otros (suponiendo que no esté utilizando una codificación más restrictiva, comolatin1
)csv
en cuenta que en python 3 necesita elnewline=''
parámetro, de lo contrario, obtendrá líneas en blanco en su CSV al abrir en excel / opencalc.Alternativamente: prefiero usar el controlador csv en el
pandas
módulo. Creo que es más tolerante a los problemas de codificación, y los pandas convertirán automáticamente los números de cadena en CSV en el tipo correcto (int, float, etc.) al cargar el archivo.Nota:
utf8
en python3, y también descubrirá los encabezados.dataframe.to_dict('records')
csv
módulo vanilla , debe alimentarloOrderedDict
o aparecerán en un orden aleatorio (si trabaja en python <3.5). Ver: Preservar el orden de las columnas en Python Pandas DataFrame para más información.fuente
Porque @User y @BiXiC pidieron ayuda con UTF-8 aquí una variación de la solución de @Matthew. (No se me permite comentar, así que estoy respondiendo).
fuente
Esta sería la forma más sencilla de escribir datos en un archivo .csv
fuente
Aquí hay otra solución más general, suponiendo que no tenga una lista de filas (tal vez no quepan en la memoria) o una copia de los encabezados (tal vez la
write_csv
función sea genérica):Nota : el constructor OrderedDict utilizado aquí solo conserva el orden en python> 3.4. Si el orden es importante, use el
OrderedDict([('name', 'bob'),('age',25)])
formulario.fuente
fuente