Manejo de Archivos en Python

Imagina que cada programa que escribes es una conversación con el mundo digital. Hasta ahora, has aprendido a comunicarte dentro de tu código, pero ¿qué pasa cuando necesitas guardar esa conversación para el futuro, compartirla con otros, o leer lo que otros han escrito?

Los archivos son la memoria persistente de las computadoras. Son como diarios digitales que conservan nuestras ideas, datos y creaciones más allá de la ejecución de un programa. En este taller, aprenderás a interactuar con estos diarios digitales usando Python.

El manejo de archivos es una de las habilidades más importantes en programación, porque conecta el mundo efímero de la memoria RAM con el mundo permanente del almacenamiento. Cada vez que guardas un documento, subes una foto, o consultas una base de datos, estás trabajando con archivos.

¿Por qué es importante aprender esto?

En un mundo donde los datos son el nuevo petróleo, saber cómo manejar archivos te permite:

  • Crear programas que conserven información entre ejecuciones
  • Procesar grandes volúmenes de datos almacenados
  • Intercambiar información entre diferentes aplicaciones
  • Desarrollar aplicaciones útiles para la vida real
Piensa en esto:

¿Cómo crees que WhatsApp guarda tus mensajes? ¿O cómo Spotify recuerda tus canciones favoritas? Todo se reduce al manejo de archivos y bases de datos. Hoy darás el primer paso para entender esta magia digital.

Objetivo de Aprendizaje

Dominar las operaciones fundamentales de manejo de archivos en Python mediante la exploración práctica de métodos de lectura, escritura y manipulación de archivos de texto y binarios, desarrollando así la capacidad de crear programas que interactúen con el sistema de archivos de manera eficiente, segura y elegante, mientras se cultiva una mentalidad crítica hacia la organización de datos digitales y se fortalece la confianza para enfrentar desafíos de procesamiento de información en contextos reales.

Competencias a desarrollar

Técnicas

  • Utilizar funciones y métodos para abrir, leer y escribir archivos
  • Manejar excepciones al trabajar con archivos
  • Procesar diferentes formatos de archivos (texto, binario, CSV)

Cognitivas

  • Analizar la estructura y organización de archivos
  • Evaluar diferentes enfoques para resolver problemas de manejo de datos
  • Diseñar soluciones eficientes para procesamiento de información

Actitudinales

  • Valorar la importancia de manejar datos con responsabilidad
  • Desarrollar perseverancia ante errores de entrada/salida
  • Cultivar curiosidad por explorar diferentes formatos de datos

Contextualización

Eres el historiador de tu propia vida digital. Cada like, cada mensaje, cada foto que tomas con tu celular son fragmentos de tu historia que se almacenan en archivos. Hoy aprenderás a ser el curador de esos archivos.

Tu historia digital:

Imagina que quieres crear un diario personal programático. Cada día, tu programa te preguntará cómo estuvo tu día, guardará tus reflexiones en un archivo, y podrás revisar lo que escribiste hace semanas o meses. Para construir esto, necesitas entender cómo Python interactúa con archivos.

La metáfora del archivador

Piensa en el sistema de archivos como un gran archivador con carpetas (directorios) y documentos (archivos). Python te da las llaves de este archivador, permitiéndote:

  • Abrir los cajones y carpetas (acceder a directorios)
  • Leer documentos existentes (leer archivos)
  • Escribir nuevos documentos (crear y modificar archivos)
  • Organizar tu archivador (manejar rutas y directorios)

En Ecuador, donde la transformación digital está redefiniendo todos los sectores, desde la agricultura hasta la educación, entender el manejo de archivos te posiciona como un creador, no solo un consumidor, de tecnología. Podrás automatizar tareas, analizar datos locales, y crear soluciones relevantes para tu comunidad.

Del aula al mundo real

Los conceptos que aprenderás hoy son los mismos que usan:

  • Los desarrolladores de aplicaciones móviles para guardar preferencias
  • Los científicos de datos para procesar grandes conjuntos de información
  • Los ingenieros para registrar datos de sensores
  • Los artistas digitales para manejar sus recursos multimedia

Estás a punto de aprender un superpoder digital: la capacidad de hacer que tus programas recuerden.

Actividad Práctica

A continuación, exploraremos los conceptos fundamentales del manejo de archivos en Python con ejemplos prácticos que puedes probar en tu computadora.

1. Conceptos básicos de archivos

Un archivo es una secuencia de bytes con un nombre, almacenada en un sistema de archivos. Python distingue entre archivos de texto (legibles por humanos) y binarios (código máquina).

Ejemplo: Rutas de archivos
# Rutas absolutas vs relativas
import os

# Ruta absoluta (completa desde la raíz del sistema)
ruta_absoluta = "C:\\Users\\Estudiante\\documentos\\diario.txt"  # Windows
# ruta_absoluta = "/home/estudiante/documentos/diario.txt"  # Linux/Mac

# Ruta relativa (desde la ubicación actual)
ruta_relativa = "datos\\diario.txt"  # Si estás en la carpeta que contiene 'datos'
ruta_relativa2 = ".\\config\\configuracion.ini"  # .\ significa directorio actual
ruta_relativa3 = "..\\proyectos\\app.py"  # ..\ significa directorio padre

print("Ruta absoluta:", ruta_absoluta)
print("Ruta relativa:", ruta_relativa)

2. Apertura y cierre de archivos

La función open() es tu puerta de entrada a los archivos. Es crucial cerrar los archivos después de usarlos para liberar recursos.

Ejemplo: Modos de apertura y with
# Modos de apertura:
# 'r' - Lectura (por defecto)
# 'w' - Escritura (sobrescribe si existe, crea si no)
# 'a' - Anexar (agrega al final)
# 'x' - Creación exclusiva (falla si ya existe)
# 'b' - Modo binario
# 't' - Modo texto (por defecto)
# '+' - Actualización (lectura y escritura)

# Forma tradicional (debes cerrar manualmente)
archivo = open("ejemplo.txt", "w")
archivo.write("Hola, mundo!")
archivo.close()  # ¡IMPORTANTE! No olvidar cerrar

# Forma recomendada: administrador de contexto (with)
with open("ejemplo.txt", "w", encoding="utf-8") as archivo:
    archivo.write("Hola, mundo con with!")
# El archivo se cierra automáticamente al salir del bloque with

3. Lectura de archivos

Existen varias formas de leer archivos, cada una útil para diferentes escenarios.

Ejemplo: Métodos de lectura
# Crear un archivo de ejemplo
with open("poema.txt", "w", encoding="utf-8") as f:
    f.write("Primera línea del poema\n")
    f.write("Segunda línea, con emoción\n")
    f.write("Tercera línea, la conclusión")

# Método 1: read() - Lee todo el contenido
with open("poema.txt", "r", encoding="utf-8") as f:
    contenido = f.read()
    print("Contenido completo:\n", contenido)

# Método 2: readline() - Lee línea por línea
print("\nLínea por línea:")
with open("poema.txt", "r", encoding="utf-8") as f:
    linea1 = f.readline()
    linea2 = f.readline()
    linea3 = f.readline()
    print("1:", linea1.strip())  # strip() elimina saltos de línea
    print("2:", linea2.strip())
    print("3:", linea3.strip())

# Método 3: readlines() - Lee todas las líneas en una lista
with open("poema.txt", "r", encoding="utf-8") as f:
    lineas = f.readlines()
    print("\nLista de líneas:", lineas)

# Método 4: Bucle directo (más eficiente para archivos grandes)
print("\nUsando bucle for:")
with open("poema.txt", "r", encoding="utf-8") as f:
    for i, linea in enumerate(f, 1):
        print(f"Línea {i}: {linea.strip()}")

Reflexión: ¿Cuándo sería mejor usar read() y cuándo sería mejor procesar línea por línea? Piensa en archivos pequeños vs. archivos muy grandes (como logs de servidores o bases de datos).

4. Escritura de archivos

Escribir en archivos nos permite guardar resultados, crear reportes o almacenar datos para uso futuro.

Ejemplo: Métodos de escritura
# Escritura básica con write()
with open("datos.txt", "w", encoding="utf-8") as f:
    f.write("Este es un archivo de datos.\n")
    f.write("Aquí guardaremos información importante.\n")
    f.write("Línea final del archivo.")

# Anexar contenido al final del archivo
with open("datos.txt", "a", encoding="utf-8") as f:
    f.write("\n\n--- NUEVA ENTRADA ---\n")
    f.write("Fecha: 2023-10-15\n")
    f.write("Usuario: EstudiantePython\n")

# Escritura de una lista con writelines()
lineas_a_escribir = [
    "\n\n--- LISTA DE TAREAS ---\n",
    "1. Aprender Python\n",
    "2. Practicar manejo de archivos\n",
    "3. Crear un proyecto personal\n"
]

with open("datos.txt", "a", encoding="utf-8") as f:
    f.writelines(lineas_a_escribir)

# Verificar lo escrito
with open("datos.txt", "r", encoding="utf-8") as f:
    print("Contenido final del archivo:\n")
    print(f.read())

5. Manejo de errores

Los errores al trabajar con archivos son comunes. Python nos proporciona excepciones específicas para manejarlos elegante.

Ejemplo: Manejo de excepciones con archivos
def leer_archivo_seguro(nombre_archivo):
    try:
        with open(nombre_archivo, "r", encoding="utf-8") as f:
            contenido = f.read()
        return contenido
    
    except FileNotFoundError:
        return f"Error: El archivo '{nombre_archivo}' no existe."
    
    except PermissionError:
        return f"Error: No tienes permiso para leer '{nombre_archivo}'."
    
    except IOError as e:
        return f"Error de E/S: {e}"
    
    except Exception as e:
        return f"Error inesperado: {e}"

# Probar la función
print(leer_archivo_seguro("archivo_existente.txt"))
print(leer_archivo_seguro("archivo_inexistente.txt"))
Experimenta:

Modifica el código anterior para crear una función que intente escribir en un archivo en una ubicación protegida (como "C:\\Windows\\archivo.txt" en Windows o "/root/archivo.txt" en Linux). Observa qué excepción se produce y cómo manejarla.

El Reto Final

Tu Misión: Sistema de Gestión de Contactos

Contexto: Eres el desarrollador de una pequeña empresa ecuatoriana que necesita digitalizar su libreta de contactos. Tu tarea es crear un programa en Python que gestione contactos almacenándolos en un archivo.

Requisitos:

  1. El programa debe almacenar contactos con: nombre, teléfono, email y ciudad.
  2. Debe permitir agregar nuevos contactos (sin borrar los existentes).
  3. Debe permitir buscar contactos por nombre o ciudad.
  4. Debe mostrar todos los contactos ordenados alfabéticamente.
  5. Debe permitir eliminar contactos existentes.
  6. Todos los datos deben guardarse en un archivo llamado "contactos.txt".
  7. El programa debe ser resistente a errores (archivo no existe, datos corruptos, etc.).

Nivel Básico: Implementa las funciones de agregar y listar contactos.

Nivel Intermedio: Agrega búsqueda y ordenamiento.

Nivel Avanzado: Implementa todas las funciones con una interfaz de menú amigable.

Pista: Considera usar el formato CSV para almacenar los contactos. Cada línea podría ser: nombre,telefono,email,ciudad. El módulo csv de Python te será muy útil.

Para pensar: ¿Cómo diseñarías el programa para que pueda crecer en el futuro? ¿Qué pasaría si la empresa quisiera agregar campos adicionales como "fecha de cumpleaños" o "notas"?

Criterios de Éxito

Tu solución será evaluada según:

  • Funcionalidad: ¿Cumple con todos los requisitos?
  • Robustez: ¿Maneja adecuadamente los errores?
  • Legibilidad: ¿El código es claro y bien organizado?
  • Eficiencia: ¿Es eficiente en el manejo de archivos?
  • Creatividad: ¿Añade características innovadoras?

Recuerda: La programación es un arte y una ciencia. No solo se trata de que funcione, sino de que sea elegante, mantenible y humano.

Evaluación Lúdica

¡Pon a prueba lo aprendido! Responde las siguientes preguntas sobre manejo de archivos en Python.

Test de Conocimientos

Puntuación: 0/5
Cargando pregunta...

Reflexión final: El manejo de archivos es mucho más que una técnica de programación. Es la puerta a la persistencia de datos, a la creación de aplicaciones reales, a la transformación de información en conocimiento. Cada vez que trabajas con archivos, estás dejando una huella digital, un fragmento de tu pensamiento que perdurará más allá de la ejecución de tu programa.