python

Leer archivo CSV con Python

En este post de programación con Python te mostraré cómo leer un archivo CSV. Un archivo CSV es un archivo que tiene datos separados por comas (aunque el delimitador puede ser otro carácter).

Te enseñaré a leer un CSV con Python de dos maneras:

  • Manualmente usando split y funciones del lenguaje
  • Usando el módulo csv ya presente en Python

Al final también te dejaré un ejemplo en donde sacamos el promedio de datos del archivo CSV usando Python.

El archivo CSV que vamos a leer

Vamos a abrir un CSV que se ve así:

Nombre,Calificación,Precio
Cuphead,100,180
Doom eternal,99,1400
Horizon Zero Dawn,90,450.7
Resident Evil 2 Remake,95,450.88
Super Mario Odyssey,90,1700.05
Minecraft,95,550.54

Si lo ves formateado es porque Gist lo hace así, pero si le das en “view raw” se verá como es originalmente.

Como sea, es una lista de juegos con calificación y precio. Recuerda que estos datos no son reales; solo son de ejemplo.

Leer CSV con Python manualmente

Veamos el primer enfoque, el cual es leerlo sin usar módulos o paquetes. El algoritmo es sencillo.

Primero, abrimos el archivo como cualquier otro. Luego, lo iteramos línea por línea (pero omitimos la primera, pues es el encabezado). En cada paso, usamos split para convertir la línea a lista (de este modo tendremos las columnas del archivo).

Ahora podemos acceder a la lista y tendremos cada valor a través del índice. La primera columna estará en el índice 0, la segunda en 1, etcétera.

El código queda así:

"""
    https://parzibyte.me/blog
"""

nombre_archivo = "videojuegos.csv"
with open(nombre_archivo, "r") as archivo:
    # Omitir el encabezado
    next(archivo, None)
    for linea in archivo:
        # Remover salto de línea
        linea = linea.rstrip()
        # Ahora convertimos la línea a arreglo con split
        separador = ","
        lista = linea.split(",")
        # Tenemos la lista. En la 0 tenemos el nombre, en la 1 la calificación y en la 2 el precio
        nombre = lista[0]
        calificacion = int(lista[1])
        precio = float(lista[2])
        print(
            f"Juego: '{nombre}' con calificación {calificacion} y precio {precio}")

Como puedes ver, usamos next para omitir la primera línea, pues al final el archivo es un iterador. También es importante notar que usamos las conversiones de tipos, por ejemplo convertimos a entero en la línea 17, y en la 18 convertimos a flotante.

Finalmente usamos las f strings de Python para imprimir cada valor. La salida será:

Juego: 'Cuphead' con calificación 100 y precio 180.0
Juego: 'Doom eternal' con calificación 99 y precio 1400.0
Juego: 'Horizon Zero Dawn' con calificación 90 y precio 450.7
Juego: 'Resident Evil 2 Remake' con calificación 95 y precio 450.88
Juego: 'Super Mario Odyssey' con calificación 90 y precio 1700.05
Juego: 'Minecraft' con calificación 95 y precio 550.54

Usar módulo csv en Python

Ya existe un módulo nativo en Python que sirve para leer archivos CSV. Permite igualmente leer un archivo pero de una manera más sencilla.

Comenzamos importando el módulo csv, después creamos un lector a partir del archivo, usando csv.reader. Finalmente tendremos un iterador en donde ya tenemos a las columnas (como cuando hicimos el split) y podemos acceder a ellas.

import csv
"""
    https://parzibyte.me/blog
"""

nombre_archivo = "videojuegos.csv"
with open(nombre_archivo, "r") as archivo:
    lector = csv.reader(archivo, delimiter=",")
    # Omitir el encabezado
    next(lector, None)
    for fila in lector:
        # Tenemos la lista. En la 0 tenemos el nombre, en la 1 la calificación y en la 2 el precio
        nombre = fila[0]
        calificacion = int(fila[1])
        precio = float(fila[2])
        print(
            f"Juego: '{nombre}' con calificación {calificacion} y precio {precio}")

La diferencia que podemos notar aquí es que al crear el lector indicamos el delimitador, de este modo podemos cambiarlo fácilmente. La salida es la misma que la anterior.

Ejercicio con Python y CSV: promedio

Solo para terminar este post te mostraré un ejercicio sencillo. A partir de los datos, vamos a sacar el promedio de los precios y el promedio de la calificación. Realmente estos datos no son útiles, pero sí que sirven para practicar.

Por lo tanto el código queda así:

import csv
"""
    https://parzibyte.me/blog
"""

nombre_archivo = "videojuegos.csv"
with open(nombre_archivo, "r") as archivo:
    lector = csv.reader(archivo, delimiter=",")
    # Omitir el encabezado
    next(lector, None)
    suma_calificacion = 0
    suma_precio = 0
    contador = 0
    for fila in lector:
        # Tenemos la lista. En la 0 tenemos el nombre, en la 1 la calificación y en la 2 el precio
        nombre = fila[0]
        calificacion = int(fila[1])
        precio = float(fila[2])
        suma_calificacion += calificacion
        suma_precio += precio
        contador += 1
    promedio_precio = suma_precio / contador
    promedio_calificacion = suma_calificacion / contador
    print(
        f"Promedio de precio es {promedio_precio} y promedio calificación es {promedio_calificacion}")

También te dejo con más tutoriales sobre Python.

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.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

Entradas recientes

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

3 días hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

3 días hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

3 días hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

3 días hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

3 días hace

Solución: Apache – Server unable to read htaccess file

Ayer estaba editando unos archivos que son servidos con el servidor Apache y al visitarlos…

4 días hace

Esta web usa cookies.