Escribir diccionario en CSV en Python

Rayven Esplanada 11 marzo 2021
Escribir diccionario en CSV en Python

Este tutorial presentará cómo escribir una variable de diccionario en un archivo csv en Python.

Utilice el módulo csv para escribir un diccionario en un archivo CSV en Python

El módulo de Python csv contiene herramientas y funciones para manipular archivos csv. Hay dos métodos fáciles de usar para escribir diccionarios en un archivo csv: writer() y DictWriter().

Estos dos métodos tienen funciones similares; la única diferencia es que DictWriter() es una clase envolvente que contiene más funciones.

Pongamos un primer ejemplo con un único diccionario con unos cuantos pares clave-valor:

dct = {"Name": "John", "Age": "23", "Country": "USA"}

En el primer ejemplo, utilizamos writer() para acceder a un nuevo archivo csv e insertar el diccionario en él.

import csv

dct = {"Name": "John", "Age": "23", "Country": "USA"}

with open("dct.csv", "w") as f:
    writer = csv.writer(f)
    for k, v in dct.items():
        writer.writerow([k, v])

Como el tipo de acceso al archivo es w, el contenido del archivo csv dct.csv será anulado por los nuevos cambios. Si el archivo no existe, se creará automáticamente en el mismo directorio.

El contenido del archivo csv saldrá:

Archivo CSV

Dado que sólo hay una entrada de diccionario, el diseño del archivo csv contiene todas las claves en la primera columna, y los valores están en la segunda columna.

Ejemplo de uso de un array de diccionarios

Ese fue un ejemplo de un solo diccionario. ¿Qué pasa si quiere insertar varios diccionarios en un solo archivo csv?

Para este ejemplo, se utilizará la función DictWriter() para escribir en un archivo csv. También habría que cambiar el diseño del CSV del primer ejemplo, ya que hay múltiples valores con las mismas claves.

La primera fila debería contener las etiquetas de las claves, y las filas siguientes contendrían los valores de cada entrada del diccionario.

En primer lugar, declare un array de diccionarios con los mismos valores clave.

dct_arr = [
    {"Name": "John", "Age": "23", "Country": "USA"},
    {"Name": "Jose", "Age": "44", "Country": "Spain"},
    {"Name": "Anne", "Age": "29", "Country": "UK"},
    {"Name": "Lee", "Age": "35", "Country": "Japan"},
]

Ahora escriba esta matriz de diccionarios en un archivo csv utilizando el módulo csv y DictWriter().

import csv

labels = ["Name", "Age", "Country"]
dct_arr = [
    {"Name": "John", "Age": "23", "Country": "USA"},
    {"Name": "Jose", "Age": "44", "Country": "Spain"},
    {"Name": "Anne", "Age": "29", "Country": "UK"},
    {"Name": "Lee", "Age": "35", "Country": "Japan"},
]

try:
    with open("csv_dct.csv", "w") as f:
        writer = csv.DictWriter(f, fieldnames=labels)
        writer.writeheader()
        for elem in dct_arr:
            writer.writerow(elem)
except IOError:
    print("I/O error")

Al parámetro fieldnames en DictWriter() se le asigna la variable labels, que es un array de etiquetas de claves del array de diccionarios.

También es bueno practicar el envolver el código que manipula los archivos con el manejo de excepciones (try ... except). Esto es por si hubiera errores externos o incompatibilidades en el proceso de escritura de archivos.

Producción:

Array de archivos CSV

En resumen, el módulo csv contiene todas las funciones y herramientas necesarias para escribir un diccionario en un archivo csv. Las funciones writer() y DictWriter() pueden utilizarse fácilmente para conseguirlo.

También es bueno tener en cuenta para envolver los bloques que manipulan los archivos con el manejo de excepciones para asegurar que los errores IO son capturados antes de que se rompa algo.

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

Artículo relacionado - Python CSV

Artículo relacionado - Python Dictionary