Convertir CSV a lista de diccionarios con Python - Ejemplo de código

Convertir CSV a lista de diccionarios en Python

Hoy vamos a ver un ejemplo simple con Python y los archivos CSV. Veremos cómo convertir un CSV a un arreglo.

Primero vamos a convertir cada columna del archivo a un diccionario de Python, y después vamos a agregar ese diccionario a nuestra lista.

En el ejemplo te mostraré cómo leer datos enteros y flotantes, así como cadenas. De este modo tú podrás leer cualquier archivo separado por comas para tenerlo como array en Python.

Nota: yo decidí usar un diccionario, tú podrías usar una lista de listas o cualquier otra cosa.

Explicación del algoritmo

Vamos a abrir y leer el archivo línea por línea (omitiendo el encabezado si es necesario). En cada paso, tendremos una línea del CSV.

Ahora convertiremos esa línea a arreglo con split, y ya  tendremos las columnas separadas. Luego transformamos cada valor a su tipo en caso de ser necesario, y lo asignamos al diccionario.

Cuando tenemos el diccionario, lo agregamos al arreglo con append. Y finalmente ya tendremos el CSV cargado a nuestro arreglo con Python.

El archivo CSV

Para este ejemplo tengo un archivo de alumnos en donde la primera línea es el encabezado y luego tenemos, en orden, el nombre, la edad, la altura y la matrícula.

Nombre,Edad,Altura,Matrícula
Luis,50,1.2,1
Pedro,22,1.3,2
Link,34,0.56,3
Juan,10,2,4
Zero,12,1.2,5
Steve,23,2.5,6

(dale a view raw al gist para que veas el archivo real).

El orden de las columnas importa, ya que los vamos a leer así más adelante.

CSV a lista de Python

Entonces abrimos el archivo. Definimos el separador y la lista donde vamos a tener los datos:

    separador = ","
    with open(nombre_archivo, encoding="utf-8") as archivo:
        next(archivo)  # Omitir encabezado del archivo
        alumnos = []

Luego iteramos el archivo línea por línea, quitamos el salto de línea con rstrip, convertimos y asignamos. La definición del diccionario está junto con la llamada a append en la línea 8.

        for linea in archivo:
            linea = linea.rstrip("\n")  # Quitar salto de línea
            columnas = linea.split(separador)
            nombre = columnas[0]
            edad = int(columnas[1])
            altura = float(columnas[2])
            matricula = columnas[3]
            alumnos.append({
                "nombre": nombre,
                "edad": edad,
                "altura": altura,
                "matricula": matricula,
            })
        return alumnos

Fíjate en que estoy usando int y float para convertir las cadenas a números. Finalmente encerramos todo el comportamiento en una función:

# https://parzibyte.me/blog
def obtener_csv_como_lista_de_diccionarios(nombre_archivo):
    separador = ","
    with open(nombre_archivo, encoding="utf-8") as archivo:
        next(archivo)  # Omitir encabezado del archivo
        alumnos = []
        for linea in archivo:
            linea = linea.rstrip("\n")  # Quitar salto de línea
            columnas = linea.split(separador)
            nombre = columnas[0]
            edad = int(columnas[1])
            altura = float(columnas[2])
            matricula = columnas[3]
            alumnos.append({
                "nombre": nombre,
                "edad": edad,
                "altura": altura,
                "matricula": matricula,
            })
        return alumnos

Y ya podemos invocar a esta función desde cualquier lugar, pasándole el nombre del archivo.

Poniendo todo junto

Entonces con el siguiente CSV:

Nombre,Edad,Altura,Matrícula
Luis,50,1.2,1
Pedro,22,1.3,2
Link,34,0.56,3
Juan,10,2,4
Zero,12,1.2,5
Steve,23,2.5,6

Podemos usar el siguiente código para leer el archivo e imprimir cada dato por separado:

# https://parzibyte.me/blog
def obtener_csv_como_lista_de_diccionarios(nombre_archivo):
    separador = ","
    with open(nombre_archivo, encoding="utf-8") as archivo:
        next(archivo)  # Omitir encabezado del archivo
        alumnos = []
        for linea in archivo:
            linea = linea.rstrip("\n")  # Quitar salto de línea
            columnas = linea.split(separador)
            nombre = columnas[0]
            edad = int(columnas[1])
            altura = float(columnas[2])
            matricula = columnas[3]
            alumnos.append({
                "nombre": nombre,
                "edad": edad,
                "altura": altura,
                "matricula": matricula,
            })
        return alumnos


def main():
    alumnos = obtener_csv_como_lista_de_diccionarios("alumnos.csv")
    for alumno in alumnos:
        nombre = alumno["nombre"]
        edad = alumno["edad"]
        altura = alumno["altura"]
        matricula = alumno["matricula"]
        print(
            f"Tenemos a {nombre} con {edad} años, altura {altura} y matrícula {matricula}")


main()

La salida es correcta:

Convertir CSV a lista de diccionarios con Python - Ejemplo de código
Convertir CSV a lista de diccionarios con Python – Ejemplo de código

En este caso solo estoy imprimiendo los datos pero tú puedes hacer cualquier otro tipo de cosas con ellos.

Y con este ejemplo espero que quede claro cómo leer un CSV en Python para convertirlo a un arreglo.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *