Saltar al contenido

¿Cómo convierto esta lista de diccionarios en un archivo csv?

No dejes de divulgar nuestro espacio y códigos con tus amigos, ayúdanos a aumentar nuestra comunidad.

Solución:

import csv
toCSV = ['name':'bob','age':25,'weight':200,
         'name':'jim','age':31,'weight':180]
keys = toCSV[0].keys()
with open('people.csv', 'w', newline='')  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 pedido. Como señaló Wilduck, DictWriter es más apropiado aquí.

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, como latin1)

import csv
toCSV = ['name':'bob','age':25,'weight':200,
         'name':'jim','age':31,'weight':180]
with open('people.csv', 'w', encoding='utf8', newline='') as output_file:
    fc = csv.DictWriter(output_file, 
                        fieldnames=toCSV[0].keys(),

                       )
    fc.writeheader()
    fc.writerows(toCSV)
  • Tenga en cuenta que csv en python 3 necesita el newline='' 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. Encuentro que es más tolerante con los problemas de codificación, y los pandas se convertirán automáticamente string números en CSV en el tipo correcto (int, float, etc.) al cargar el archivo.

import pandas
dataframe = pandas.read_csv(filepath)
list_of_dictionaries = dataframe.to_dict('records')
dataframe.to_csv(filepath)

Nota:

  • pandas se encargará de abrir el archivo por usted si le da una ruta, y por defecto será utf8 en python3, y descubra los encabezados también.
  • un marco de datos no es la misma estructura que lo que le brinda CSV, por lo que agrega una línea al cargar para obtener lo mismo: dataframe.to_dict('records')
  • pandas también hace que sea mucho más fácil controlar el orden de las columnas en su archivo csv. De forma predeterminada, están en orden alfabético, pero puede especificar el orden de las columnas. con vainilla csv módulo, necesita alimentarlo con un OrderedDict o aparecerán en un orden aleatorio (si se trabaja en python <3.5). Consulte: Preservar el orden de las columnas en Python Pandas DataFrame para obtener más información.

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')

Comentarios y puntuaciones de la guía

Puedes secundar nuestra labor escribiendo un comentario y valorándolo te estamos eternamente agradecidos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada.