4.1 Gestión de archivos en Python: lectura, escritura y contexto with

1

Apertura segura con el gestor de contexto with open()

La sentencia with garantiza el cierre automático del descriptor de archivo incluso si se produce una excepción en tiempo de ejecución:

$$\text{with open('datos.txt', 'r', encoding='utf-8') as f:}$$
Ejemplo:

Leemos el contenido completo de un archivo de calibración espectral:

$$\text{with open('espectro.dat', 'r', encoding='utf-8') as f: contenido = f.read()}$$
2

Modos de apertura: lectura 'r', sobreescritura 'w' y anexado 'a'

El modo define las operaciones permitidas y el posicionamiento del puntero de lectura/escritura en el fichero:

$$\text{'r'} \rightarrow \text{Lectura}, \quad \text{'w'} \rightarrow \text{Sobreescritura destructiva}, \quad \text{'a'} \rightarrow \text{Anexado al final}$$
Ejemplo:

Anexamos una nueva línea de registro térmico sin destruir los registros previos:

$$\text{with open('log_temperatura.txt', 'a', encoding='utf-8') as f: f.write("300.2 K\n")}$$
3

Iteración eficiente línea a línea sobre el objeto archivo

En archivos científicos de gran tamaño, iterar directamente sobre el descriptor f evita cargar todo el archivo en la memoria RAM:

$$\text{for linea in f: procesar(linea.strip())}$$
Ejemplo:

Contamos cuántas líneas de datos válidas (sin encabezados) contiene un dataset:

$$\text{num_puntos = sum(1 for linea in f if not linea.startswith('#'))}$$
4

Estructuración y delimitación de datos: CSV y formatos tabulados

Para exportar datos tabulares se emplean separadores estándar como comas, tabuladores \t o espacios en blanco:

$$\text{f.write(f"{tiempo:.3f}\t{voltaje:.6f}\n")}$$
Ejemplo:

Escribimos una cabecera explicativa previa al volcado de resultados:

$$\text{f.write("# Tiempo (s)\tAmplitud (nm)\n")}$$
Ejemplo 1: Lectura de líneas filtrando retornos de carro
$$\text{with open('muestras.txt', 'r', encoding='utf-8') as f:}$$
$$\text{lineas = [l.strip() for l in f if l.strip()]} \longrightarrow \text{Lista de cadenas limpias sin saltos \n vacíos.}$$
Ejemplo 2: Volcado de una lista de enteros en columnas
$$\text{datos = [10, 20, 30, 40]}$$
$$\text{with open('salida.dat', 'w', encoding='utf-8') as f: f.write('\n'.join(map(str, datos)) + '\n')}$$
Ejemplo 3: Lectura segura con cláusula try-except ante archivo inexistente
$$\text{try: with open('inexistente.dat', 'r') as f: texto = f.read()}$$
$$\text{except FileNotFoundError: texto = ""} \longrightarrow \text{Captura elegante que evita el aborto del programa.}$$
Ejemplo 4: Escritura de matriz bidimensional separada por comas
$$\text{M = [[1.0, 2.5], [3.2, 4.8]]}$$
$$\text{with open('matriz.csv', 'w') as f: [f.write(','.join(map(str, fila)) + '\n') for fila in M]}$$
Ejemplo 5: Consulta y posicionamiento del cursor con tell() y seek()
$$\text{with open('datos.txt', 'r') as f: f.seek(0); cabecera = f.readline()}$$
$$\text{pos = f.tell()} \longrightarrow \text{Índice en bytes de la posición actual del puntero del fichero.}$$