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:
Al final también te dejaré un ejemplo en donde sacamos el promedio de datos del archivo CSV usando Python.
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.
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
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.
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.
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Ayer estaba editando unos archivos que son servidos con el servidor Apache y al visitarlos…
Esta web usa cookies.
Ver comentarios
Buenas noches, podría ayudarme con este ejercicio por favor. Realice un procedimiento que imprima la cantidad de números mayores a 50
encontrados en el archivo “Advertising.csv” (Ejemplo: “En el archivo existen
30 números mayores a 50”).
Buenas noches. Solo atiendo solicitudes en https://parzibyte.me/#contacto