Curso de Fundamentos de Python

Escritura y lectura de archivos en Python

Curso de Fundamentos de Python

Contenido del curso

Primeros Pasos con Python

Escritura y lectura de archivos en Python

Resumen

Construir una máquina de café en Python te enseña a manejar escritura y lectura de archivos con casos reales: guardar pedidos, mostrar historial y controlar errores cuando el archivo aún no existe. Aquí verás cómo cerrar el proyecto final del curso usando diccionarios, modos de apertura y manejo de excepciones.

Cómo validar la opción del usuario con un diccionario en Python

El punto de partida es un diccionario donde las keys son números (1, 2, 3, 4) y los values son los nombres de los cafés: expreso, capuchino, latte y americano. Cuando preguntas if opcion in cafes, Python revisa directamente las claves, así que no necesitas escribir cafes.keys() para que funcione.

Si la opción es válida, guardas el café en una variable llamada cafe_elegido accediendo con cafes[opcion]. Si no lo es, el else imprime un mensaje pidiendo intentar de nuevo. Este patrón evita validaciones largas con múltiples if encadenados [01:05].

¿Por qué usar un diccionario en vez de listas? Porque te permite validar la opción y obtener el nombre del café en una sola operación, sin recorrer estructuras manualmente.

Cómo escribir pedidos en un archivo .txt sin sobrescribir datos

Aquí aparece la decisión clave del proyecto: el modo de apertura del archivo. Si usas "w", cada pedido nuevo borra el anterior. La solución es usar "a" (append), que agrega contenido al final del archivo sin tocar lo que ya estaba escrito [02:45].

La estructura queda así:

  • Abrir el archivo con with open(ARCHIVO_PEDIDOS, "a", encoding="utf-8") as archivo.
  • Escribir el café con archivo.write(cafe_elegido + "\n").
  • Usar "\n" para que cada pedido quede en una línea distinta.

El encoding="utf-8" es importante porque permite guardar acentos y caracteres especiales sin que se rompan al leerlos después. Y el nombre del archivo se guarda en una constante ARCHIVO_PEDIDOS = "pedidos.txt", escrita en mayúsculas porque, por convención en Python, las constantes se nombran así [03:50].

Cómo importar la función pedir_café en el main

Desde el archivo principal, basta con from pedidos import pedir_cafe y llamarla en la opción 1 del menú. El bucle while mantiene la aplicación corriendo hasta que el usuario decide salir.

Cómo leer el historial de pedidos con readlines y manejo de errores

El segundo módulo, historial.py, debe leer el mismo archivo. Para evitar duplicar rutas, se reutiliza la constante ARCHIVO_PEDIDOS. La función ver_historial() se envuelve en un bloque try / except porque, si el usuario nunca ha pedido un café, el archivo no existe todavía [05:30].

La lógica es esta:

  • try: abre el archivo en modo lectura con "r" y encoding="utf-8".
  • archivo.readlines() devuelve todas las líneas en una lista llamada pedidos.
  • except FileNotFoundError: imprime que aún no existe un historial.

¿Qué hace FileNotFoundError en Python? Es la excepción que se dispara cuando intentas leer un archivo que no existe. Atraparla evita que el programa se rompa.

Cómo numerar el historial con enumerate

Para mostrar cada pedido con su número, entra en escena enumerate, una función que devuelve dos valores en cada vuelta del bucle: el índice y el contenido. Le pasas enumerate(pedidos, 1) para que la numeración arranque en 1 en lugar de 0 [07:20].

Dentro del for i, pedido in enumerate(pedidos, 1), conviertes i a string con str(i) y aplicas pedido.strip() para eliminar el salto de línea que se guardó al escribir el archivo. El método strip quita espacios y saltos al inicio y al final del texto.

Si el archivo existe pero está vacío, un else complementa al if pedidos mostrando el mensaje aún no hay ningún pedido. Así cubres los tres flujos posibles: archivo inexistente, archivo vacío y archivo con datos.

Qué aprendiste con este proyecto final de Python

La máquina de café conecta varios fundamentos en una sola aplicación funcional:

  • Diccionarios para mapear opciones a valores.
  • Modos de apertura "a" y "r" con with open.
  • Constantes en mayúscula como buena práctica.
  • Manejo de excepciones con try / except FileNotFoundError.
  • Iteración indexada con enumerate empezando desde 1.
  • Limpieza de strings con strip para eliminar \n.

Probar el flujo completo significa pedir varios cafés, ver cómo se acumulan en pedidos.txt, borrar líneas manualmente y comprobar que el historial se actualiza dinámicamente. La opción 3 ejecuta un break que rompe el while y cierra la aplicación con un mensaje de despedida [09:40].

Cuéntame en los comentarios qué café elegirías como primer pedido y qué proyecto te gustaría construir como siguiente paso en tu ruta de Python.