leer una tabla CSV y convertir una columna antes de calcular.
Entiende la idea
CSV representa una tabla en texto. Cada línea contiene una fila y los valores se separan por un delimitador, normalmente una coma. La cabecera nombra las columnas. Encaja con ventas o mediciones que comparten las mismas columnas; JSON resulta más natural para datos con niveles anidados.
csv.DictReader utiliza la cabecera para entregar cada fila como un diccionario. Así puedes consultar fila["importe"] por su nombre. La cabecera describe las claves, no una fila de datos que haya que sumar.
Una celda es el dato de una fila y una columna. Las celdas que lee DictReader llegan como texto. Aunque una columna contenga 12 y 20, primero recibes "12" y "20". Convierte el importe con int o float antes de acumularlo. Decide también qué unidad representa: euros y céntimos no se pueden mezclar sin convertir.
La biblioteca csv se ocupa del formato, incluidas celdas con separadores entre comillas. No separes las líneas a mano con split si quieres un lector que respete esas reglas.
Lee una tabla pequeña
import csv
from io import StringIO
texto = "producto,importe\nLibro,12\nJuego,20\n"
filas = list(csv.DictReader(StringIO(texto)))
total = 0
for fila in filas:
total = total + int(fila["importe"])
print(len(filas))
print(total)2 32
StringIO ofrece el texto al lector como si fuera un archivo; esas líneas proporcionadas permiten practicar sin preparar una descarga. list reúne las filas para consultarlas más de una vez.
total = 0 prepara una suma que se va actualizando: es un acumulador. La primera vuelta convierte "12" y actualiza total de 0 a 12. La segunda convierte "20" y lo deja en 32. La cabecera no cuenta como venta; len(filas) vale 2.
Un archivo real puede abrirse con open("ventas.csv", newline="", encoding="utf-8") y pasarse a DictReader. newline="" permite al lector gestionar los finales de línea. Es el mismo recorrido después de obtener las filas.
Practica con ayuda
El lector ya prepara las filas. Completa solo la transformación y la acumulación. No cambies el texto para conseguir 32: la misma operación debe funcionar con otras ventas.
Suma una columna CSV
El lector y los datos iniciales ya están preparados: consérvalos. Dentro del for, convierte fila["importe"] a int y suma ese número al total anterior. No escribas 32 directamente: la suma debe servir con otras filas. También puedes usar otra forma equivalente de sumar los importes.
2 32
Qué se comprueba
- las columnas contienen texto antes de convertir
- 12 + 20
- otros importes CSV suman 7
Al ejecutar verás los casos que necesitan revisión. No hay requisitos adicionales fuera del enunciado.
Usa 4 espacios de sangría al empezar una línea dentro de un bloque. Ctrl + Intro (⌘ + Intro en Mac) ejecuta. Tab pasa al siguiente control. Tu borrador se guarda en este navegador; Restablecer recupera el código inicial.
La salida aparecerá aquí.
Pista 1 · dónde mirar
StringIO permite leer texto como si fuera un archivo. DictReader usa la cabecera para nombrar las columnas.
Pista 2 · qué idea usar
Convierte fila["importe"] con int y suma el resultado al total anterior.
Pista 3 · un paso posible
Un paso de la solución: total = total + importe. Usa la explicación para colocarlo donde corresponde.
Ver una solución razonada
El CSV entrega "12" y "20" como texto. Convertir cada importe antes de acumular produce 32. Un for con pasos visibles evita introducir expresiones generadoras antes de estudiarlas.
import csv
from io import StringIO
texto = "producto,importe\nLibro,12\nJuego,20\n"
filas = list(csv.DictReader(StringIO(texto)))
total = 0
for fila in filas:
importe = int(fila["importe"])
total = total + importe
print(len(filas))
print(total)Inténtalo tú
¿Una celda "12" sale de DictReader como int o como str?
Comprobar y entender el porqué
str. El lector conserva el texto de la celda. Convertirlo en un número es una decisión del programa que conoce el significado de la columna.
Qué debes recordar
- La cabecera da nombre a las columnas.
- DictReader entrega una fila como diccionario.
- Las celdas llegan como texto.
- Convierte y comprueba la unidad antes de sumar.