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