python - work - ¿Cómo convierto esta lista de diccionarios a un archivo csv?
write csv python (6)
Aquí hay otra solución más general, suponiendo que no tiene una lista de filas (quizás no caben en la memoria) o una copia de los encabezados (tal vez la función write_csv
es genérica):
def gen_rows():
yield OrderedDict(name=''bob'', age=25, weight=200)
yield OrderedDict(name=''jim'', age=31, weight=180)
def write_csv():
it = genrows()
first_row = it.next() # __next__ in py3
with open("people.csv", "w") as outfile:
wr = csv.DictWriter(outfile, fieldnames=list(first_row))
wr.writeheader()
wr.writerow(first_row)
wr.writerows(it)
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)])
.
Tengo una lista de diccionarios que se ve así:
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
En el módulo csv de Python, hay un DictWriter que probablemente sea útil.
Porque @User y @BiXiC pidieron ayuda con UTF-8 aquí una variación de la solución de @Matthew. (No puedo comentar, así que estoy respondiendo).
import unicodecsv as csv
toCSV = [{''name'':''bob'',''age'':25,''weight'':200},
{''name'':''jim'',''age'':31,''weight'':180}]
keys = toCSV[0].keys()
with open(''people.csv'', ''wb'') as output_file:
dict_writer = csv.DictWriter(output_file, keys)
dict_writer.writeheader()
dict_writer.writerows(toCSV)
esto es cuando tienes una lista de diccionarios:
import csv
with open(''names.csv'', ''w'') as csvfile:
fieldnames = [''first_name'', ''last_name'']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerow({''first_name'': ''Baked'', ''last_name'': ''Beans''})
import csv
toCSV = [{''name'':''bob'',''age'':25,''weight'':200},
{''name'':''jim'',''age'':31,''weight'':180}]
keys = toCSV[0].keys()
with open(''people.csv'', ''wb'') as output_file:
dict_writer = csv.DictWriter(output_file, keys)
dict_writer.writeheader()
dict_writer.writerows(toCSV)
EDITAR: Mi solución anterior no maneja el orden. Como notó Wilduck, DictWriter es más apropiado aquí.
import csv
with open(''file_name.csv'', ''w'') as csv_file:
writer = csv.writer(csv_file)
writer.writerow((''colum1'', ''colum2'', ''colum3''))
for key, value in dictionary.items():
writer.writerow([key, value[0], value[1]])
Esta sería la forma más sencilla de escribir datos en un archivo .csv