Archivos en Python: Texto y JSON | Capítulo 24

En este capítulo, exploramos el manejo de archivos en Python, centrándonos en operaciones de lectura y escritura para archivos de texto simples y datos estructurados en formato JSON. Imagina los archivos como cuadernos digitales: Python te permite abrirlos, leer su contenido, editarlo o agregar nuevo material, todo de manera segura y eficiente. Usaremos funciones integradas como open() para interactuar con archivos de texto y el módulo json para serializar y deserializar datos. Este conocimiento es fundamental para cualquier programador, ya que te permite persistir información más allá de la ejecución de un script, como guardar configuraciones o procesar datos de logs. Prepárate para dominar estos conceptos con ejemplos prácticos y explicaciones detalladas.

Abriendo y Cerrando Archivos con Elegancia

Comencemos por lo básico: abrir un archivo en Python se hace con la función integrada open(). Esta función es como la llave que desbloquea un cajón; te da acceso al contenido, pero debes usarla con cuidado para evitar problemas como fugas de recursos. open() toma al menos dos argumentos: el nombre del archivo (o ruta) y el modo de apertura, como 'r' para lectura (read), 'w' para escritura (write) o 'a' para agregar (append). Siempre es buena práctica cerrar el archivo con close() después de usarlo, aunque veremos una forma más segura con bloques with.

Imagina que tienes un archivo de texto llamado ejemplo.txt con algunas líneas. Para leerlo, harías algo así. Recuerda, para ejecutar este código, guarda el script en un archivo como leer_archivo.py y ejecútalo con python leer_archivo.py en tu terminal.

# Ejemplo básico de apertura y lectura de un archivo de texto

# Abrimos el archivo en modo lectura ('r')
archivo = open('ejemplo.txt', 'r')

# Leemos todo el contenido como una cadena
contenido = archivo.read()
print(contenido)  # Imprime el contenido del archivo

# Siempre cerramos el archivo para liberar recursos
archivo.close()
Python

Este código abre ejemplo.txt, lee su contenido completo en una variable y lo imprime. Si el archivo no existe, Python lanzará un FileNotFoundError, así que maneja errores con try-except para robustez. Explicaremos el manejo de errores más adelante, pero por ahora, asegúrate de que cada concepto se asiente: open() devuelve un objeto de archivo, y métodos como read() extraen datos.

Para una gestión automática, usa el contexto with. Es como un mayordomo que cierra la puerta por ti: el archivo se cierra automáticamente al salir del bloque, incluso si ocurre un error.

# Usando 'with' para manejo automático de cierre

with open('ejemplo.txt', 'r') as archivo:
    contenido = archivo.read()  # Lee todo el contenido
    print(contenido)  # Imprime el contenido

# Fuera del bloque 'with', el archivo ya está cerrado
Python

Esta es la forma idiomática en Python moderno. Prueba creándote un archivo ejemplo.txt con texto simple y ejecuta el script.

Leyendo Archivos de Texto Paso a Paso

Una vez abierto, leer archivos de texto ofrece varias opciones. No siempre querrás todo el contenido de golpe; a veces, procesar línea por línea es más eficiente, como hojear un libro página a página en lugar de tragártelo entero.

El método readline() lee una línea a la vez, incluyendo el salto de línea \n. Para leer todas las líneas, usa readlines(), que devuelve una lista de cadenas. Analogía: piensa en un archivo como un rollo de papel; read() lo desenrolla todo, mientras que readlines() lo corta en tiras manejables.

# Lectura línea por línea con readlines()

with open('ejemplo.txt', 'r') as archivo:
    lineas = archivo.readlines()  # Devuelve una lista de líneas
    for linea in lineas:
        print(linea.strip())  # Imprime cada línea sin el salto de línea extra
Python

Aquí, strip() elimina espacios en blanco innecesarios, como pelar una fruta para comer solo lo esencial. Si el archivo es grande, itera directamente sobre el objeto de archivo para ahorrar memoria: for linea in archivo: print(linea.strip()). Esto lee línea por línea sin cargar todo en memoria, ideal para logs masivos.

Recuerda: los modos importan. Si intentas leer en modo 'w', fallará. Explica completamente: el modo define el permiso; 'r+' permite lectura y escritura, pero posiciona el cursor al inicio.

Escribiendo y Modificando Archivos de Texto

Ahora, pasemos a escribir en archivos. Es como anotar en tu cuaderno: abres en modo 'w' para sobrescribir todo, o 'a' para agregar al final sin borrar lo existente. El método write() toma una cadena y la escribe; no agrega saltos de línea automáticamente, así que añádelos con \n.

# Escritura básica en un archivo nuevo o existente

with open('nuevo.txt', 'w') as archivo:
    archivo.write('¡Hola, mundo!\n')  # Escribe una línea con salto
    archivo.write('Esto es una segunda línea.')  # Escribe otra sin salto inicial
Python

Ejecuta esto con python escribir_archivo.py. Si nuevo.txt no existe, se crea. Si existe, se sobrescribe. Para agregar, cambia a 'a': ideal para logs, como registrar eventos sin perder historia.

Para más control, combina lectura y escritura. Lee, modifica en memoria y escribe de nuevo. Pero sé cauteloso: escritura en 'w' borra todo, así que respalda datos si es necesario.

Manejo de Datos Estructurados con JSON

Transicionamos a JSON, que significa JavaScript Object Notation, un formato ligero para datos estructurados como diccionarios o listas. Python’s json módulo lo hace simple: json.dump() escribe datos en un archivo, y json.load() los lee de vuelta. Es como empaquetar tus pertenencias en una caja (serialización) y desempaquetarlas después (deserialización).

Primero, importa el módulo: import json. No necesitas instalaciones externas; está en la biblioteca estándar.

import json  # Importamos el módulo json

# Datos de ejemplo: un diccionario
datos = {
    'nombre': 'Python',
    'version': 3.11,
    'habilidades': ['archivos', 'JSON', 'programación']
}

# Escribimos los datos en un archivo JSON
with open('datos.json', 'w') as archivo:
    json.dump(datos, archivo, indent=4)  # 'indent=4' para legibilidad
Python

Este código crea datos.json con formato bonito. Ahora, léelo:

import json

# Leemos los datos de vuelta
with open('datos.json', 'r') as archivo:
    datos_cargados = json.load(archivo)  # Deserializa a un objeto Python
    print(datos_cargados['nombre'])  # Accede como diccionario: 'Python'
Python

json.load() convierte el JSON en un diccionario o lista Python. Maneja tipos como strings, números, booleanos, null (None), arrays y objetos. Para cadenas JSON en memoria, usa json.loads() y json.dumps(), pero nos enfocamos en archivos.

Analogía: JSON es como un idioma universal para datos; Python lo traduce perfectamente. Asegúrate de que los datos sean serializables; objetos personalizados necesitan métodos personalizados, pero por ahora, quédate con básicos.

Mejores Prácticas y Manejo de Errores

Para dominar realmente, incorpora manejo de errores. Usa try-except para capturar excepciones como FileNotFoundError o PermissionError. Por ejemplo:

try:
    with open('inexistente.txt', 'r') as archivo:
        print(archivo.read())
except FileNotFoundError:
    print("El archivo no existe. Crea uno primero.")
except Exception as e:
    print(f"Error inesperado: {e}")
Python

Esto hace tu código robusto, como un puente con barandillas. Otras prácticas: especifica encoding con encoding='utf-8' para manejar caracteres no ASCII. Siempre verifica si el archivo se abrió correctamente.

Repitiendo lo clave: cierra archivos (usa with), elige modos correctos, y para JSON, valida datos antes de dump para evitar errores de serialización.

Reglas de oro para este curso:

  • Explicaciones profundas, paso a paso y con analogías cotidianas cuando ayuden.
  • Cada concepto nuevo se explica completamente antes de pasar al siguiente.
  • tambien al primer ejemplo indicar al como ejecutarlo ejemplo python nombre.py
  • Cada bloque de código lleva comentarios explicativos claros.
  • El lector debe terminar el capítulo sintiendo que realmente domina el tema, no solo que “lo ha visto”.

Resumen del capítulo

  • Apertura de archivos: Usa open() con modos como 'r''w''a', y preferentemente bloques with para cierre automático.
  • Lectura de texto: Métodos read()readline()readlines() o iteración directa para eficiencia en archivos grandes.
  • Escritura de texto: write() para agregar contenido; elige modo para sobrescribir o append.
  • JSON handling: Importa json; usa dump() para escribir datos estructurados y load() para leerlos de vuelta, con opciones como indent para legibilidad.
  • Mejores prácticas: Maneja errores con try-except, especifica encoding, y valida datos para robustez en aplicaciones reales.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio