DÍA 20Archivos y proyecto final · Python desde cero

Integra Python básico en una app de consola que valida un CSV y resume importes por categoría.

Día 20 30 minInicial

Proyecto final: resumen de gastos de práctica

Objetivos

Al terminar podrás explicar el concepto principal y adaptar el ejemplo a un caso sencillo.

Concepto

Un proyecto integrador combina conceptos en una herramienta con un objetivo concreto. Descarga el paquete Python desde cero: contiene instrucciones, un CSV sintético, archivos iniciales, una solución y pruebas. No requiere dependencias externas; usa Python 3.11 o posterior. El CSV es ficticio y no está relacionado con Sakila ni con transacciones reales.

Ejemplo

py resumen_gastos.py
py -m unittest

La solución lee gastos.csv junto al programa y muestra cantidad e importe total por categoría. También acepta --archivo ruta/al/archivo.csv. En macOS/Linux, cambia py por python3.

Práctica guiada

Ejecuta el programa y las pruebas; modifica una copia del CSV con una fila válida y luego una inválida.

Reto

Añade detección de fechas repetidas por categoría o una opción de orden por importe y escribe una prueba.

Ver respuesta al reto

Una solución para detectar fechas repetidas por categoría agrega un conjunto antes del ciclo que lee las filas y valida cada par:

claves_vistas = set()  # antes del ciclo
 
# Dentro del ciclo, después de validar fecha y categoría:
clave = (fecha, categoria)
if clave in claves_vistas:
    raise ValueError(f"Fila {numero_fila}: fecha y categoría repetidas.")
claves_vistas.add(clave)

La prueba escribe dos filas con la misma fecha y categoría y confirma que cargar_y_resumir reporta la segunda fila:

with self.assertRaisesRegex(ValueError, "Fila 3.*repetidas"):
    cargar_y_resumir(ruta)

La fecha y la categoría forman la clave de detección; el CSV original permanece intacto.

Quiz

1. ¿Qué debe hacer el programa si un importe no se puede convertir?
2. ¿Qué indica Path(__file__).parent?
3. ¿Qué debe hacer el programa ante un monto inválido?

Comprobación

Revisa que el ejemplo produzca el resultado esperado y prueba también un caso límite relacionado con la lección.

TU PROGRESO

Cargando estado…