Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Ejercicios: El Archivo Central

Tus datos no duran si viven solo en memoria. Estos ejercicios te obligan a escribir, leer y gestionar archivos reales en disco. Para lograrlo de verdad, corre estos ejercicios en tu terminal: la edición web los ejecuta en la memoria temporal del navegador, no en tu disco.


Ejercicio 11.1: El Explorador de Rutas (pathlib)

  1. Importa Path de pathlib.
  2. Crea un objeto Path que apunte a un archivo ficticio datos/usuarios.txt.
  3. Imprime solo el nombre del archivo (usuarios.txt).
  4. Imprime la carpeta padre (datos).

Pista 1: un objeto Path guarda por separado cada pedazo de la ruta (carpeta, nombre de archivo); no necesitas trocear el string tú mismo con slicing.

Pista 2: los atributos que buscas son .name y .parent.

Ejercicio 11.2: La Nota de Bienvenida (Escritura simple)

  1. Crea un archivo llamado bienvenida.txt.
  2. Escribe dentro el texto: “¡Bienvenido al sistema v1.0!”.
  3. Lee el archivo e imprime su contenido para verificar.

Pista 1: vas a necesitar abrir el mismo archivo dos veces, con un modo distinto cada vez: una para meter el texto adentro y otra para sacarlo de vuelta.

Pista 2: escribe con with open(archivo, "w") as f: f.write(texto); al salir del bloque, el archivo se guarda y se cierra solo. Luego ábrelo de nuevo con with open(archivo, "r") as f: y usa .read() para traer todo el contenido de una vez.

Ejercicio 11.3: El Registro de Acceso (append)

Un log de seguridad básico: cada entrada se suma a lo que ya estaba.

  1. Define una lista de nombres: ["Ana", "Beto", "Carla"].
  2. Usa un bucle for para recorrer los nombres.
  3. Abre el archivo acceso.log una sola vez, antes del bucle, en modo Append ("a").
  4. Escribe una línea: “Usuario [Nombre] entró al sistema.\n”. (No olvides el \n para el salto de línea).

Pista 1: puedes abrir el archivo una sola vez con with, antes del for, y escribir las tres líneas dentro del mismo bloque. No hace falta reabrirlo en cada vuelta.

Pista 2: arma cada línea con un f-string: f"Usuario {nombre} entró al sistema.\n".

Ejercicio 11.4: Verificador de Existencia

  1. Define una ruta a un archivo secreto.txt.
  2. Comprueba: si el archivo existe, imprime su contenido; si no, crea uno nuevo con el texto ‘Top Secret’.
  3. Ejecuta el script dos veces para ver cómo cambia el comportamiento.

Pista 1: antes de crear el archivo, ¿cómo sabrías desde el código si ya existe? pathlib tiene una forma directa de preguntarlo, sin intentar abrirlo primero.

Pista 2: usa Path("secreto.txt").exists() para decidir la rama; la rama “si no existe” es la que escribe el archivo por primera vez, con modo "w".

Ejercicio 11.5: Limpieza de Archivos

Borra el archivo con .unlink(), el retiro de cajas que viste en la sección de pathlib.

  1. Crea un archivo basura.tmp.
  2. Verifica que existe.
  3. Bórralo desde el código.
  4. Verifica que ya no existe imprimiendo exists().
  • Reto: la operación no tiene deshacer; confirma con exists() antes de borrar, no solo después.

Pista 1: todo el ejercicio es demostrar, con evidencia antes y después, que un archivo desaparece de verdad del disco cuando lo borras desde código.

Pista 2: .unlink() actúa de inmediato y sin confirmación; llamar exists() después es la única forma de comprobar que funcionó.

Ejercicio 11.6: Inventario en JSON (Round-trip)

  1. Crea una lista de al menos dos diccionarios (Cap. 5) producto (con nombre y precio). Que uno tenga una coma en el nombre, como "Tornillos, 2mm".
  2. Guárdala en productos.json con json.dump (usa indent=2).
  3. Léela de vuelta con json.load y comprueba dos cosas: que el nombre con coma sobrevivió intacto, y que el precio sigue siendo número (súmale 1 sin convertir nada).

Pista 1: json.dump no le teme a las comas dentro de una cadena: el formato JSON las protege igual que Python protege las cadenas con comillas.

Pista 2: al leer con json.load, el precio vuelve como el mismo tipo numérico que guardaste (float o int), listo para sumar sin float() ni int(). Verifícalo en el .json: 1500.00 sin comillas alrededor es un número; entre comillas, es texto y algo salió mal en el paso 2.

Ejercicio 11.7: La Caja de Herramientas (import)

  1. Importa random de la biblioteca estándar y usa random.choice(...) para elegir un producto al azar de una lista.
  2. Importa date desde datetime y, con date.today(), imprime la fecha de hoy junto al producto elegido.

Pista 1: tanto elegir al azar como obtener la fecha de hoy son problemas tan comunes que ya vienen resueltos en la biblioteca estándar; no instalas nada, solo importas lo que ya trae Python.

Pista 2: random.choice(lista) regresa un elemento de la lista; date.today() no recibe argumentos.

Ejercicio 11.8: El Manifiesto en CSV (Round-trip)

El módulo con nombre de formato merece su vuelta completa:

  1. Escribe manifiesto.csv con csv.DictWriter: columnas producto y cantidad, y al menos tres filas (una con coma en el nombre, tipo "Tornillos, 2mm", para comprobar que el módulo la protege).
  2. Léelo de regreso con csv.DictReader e imprime cada fila como producto x cantidad.
  3. Suma las cantidades leídas. Recuerda: del CSV todo sale como texto; sin int() no hay suma.
  4. Encapsula los pasos 2 y 3 en una función total_manifiesto() -> int (Cap. 9) que retorne la suma.
  5. Limpia: borra el archivo al final con .unlink().

Pista 1: csv.DictWriter y csv.DictReader son simétricos: escribes con columnas nombradas y lees de vuelta con esas mismas columnas como claves de cada fila.

Pista 2: DictWriter necesita los nombres de columnas por adelantado con fieldnames=[...]; cada fila que entrega DictReader es puro texto, así que conviertes con int() solo el campo que vas a sumar; y llama a total_manifiesto() después de leer el CSV pero antes del .unlink() final, o ya no quedará nada que leer.


Cuidado: Borrar archivos no tiene deshacer. Comprueba la ruta antes de ejecutar.


Soluciones: en el Apéndice B está la solución de cada ejercicio. Inténtalo por tu cuenta antes de consultarla.


Ya sabes guardar y recuperar una lista de diccionarios sin perder un solo tipo de dato. Esa es exactamente la memoria permanente que necesita el Sistema de Gestión de Inventario del proyecto final, que arranca en el siguiente capítulo.