Procesamiento de Archivos en Python

Introducción al Manejo de Archivos

En los sistemas informáticos, las aplicaciones necesitan interactuar con el sistema operativo para almacenar datos permanentemente en el disco duro, ya que no pueden acceder directamente al hardware. Los archivos proporcionan una abstracción virtual que simplifica esta operación, permitiendo a los desarrolladores enfocarse en el flujo de trabajo: abrir, manipular y cerrar.

El flujo básico en Python se ilustra así:


# 1. Abrir el archivo para obtener un manejador
# 2. Realizar operaciones usando el manejador
# 3. Cerrar el archivo para liberar recursos

Implementación en código:


# Abrir el archivo en modo lectura con codificación UTF-8
manejador = open('ejemplo.txt', 'r', encoding='utf-8')

# Leer el contenido completo
datos = manejador.read()

# Cerrar el archivo
manejador.close()

El proceso de apertura implica una llamada al sistema operativo, que devuelve un manejador al programa.

Gestión de Recursos y Codificación

Al abrir un archivo, se generan dos recursos: el descriptor a nivel del sistema operativo y la variable en la aplicación. Es esencial liberar ambos para evitar fugas de recursos. La sentencia with facilita esta tarea:


with open('entrada.txt', 'r') as lector, open('salida.txt', 'w') as escritor:
    contenido = lector.read()
    escritor.write(contenido)

La codificación de caracteres debe especificarse para evitar errores, ya que el sistema operativo usa una predeterminada (por ejemplo, gbk en Windows o utf-8 en Linux):


archivo = open('datos.txt', 'r', encoding='utf-8')

Modos de Apertura de Archivos

El modo se indica al abrir el archivo: manejador = open('ruta', 'modo'). Los modos principales son:

Carácter Descripción
'r' Lectura (predeterminado, el archivo debe existir)
'w' Escritura (trunca el archivo o lo crea)
'a' Adición (escribe al final, crea si no existe)
'b' Modo binario
't' Modo texto (predeterminado)
'+' Actualización (lectura y escritura)

Combinaciones comunes incluyen r+, w+, a+, y modos binarios como rb, wb, ab. En modo binario, los datos se manejan como bytes sin considerar codificación.

Métodos para Operar en Archivos

Los métodos esenciales para la manipulación de archivos son:


# Métodos de lectura
lector.read()         # Lee todo el contenido
lector.readline()     # Lee una línea
lector.readlines()    # Lee todas las líneas en una lista

# Métodos de escritura
escritor.write('texto\n')            # Escribe en modo texto
escritor.write(b'bytes\n')           # Escribe en modo binario
escritor.writelines(['línea1\n', 'línea2\n'])  # Escribe una lista de strings

Otros métodos útiles incluyen readable(), writable(), closed, encoding, flush() y name.

Ejercicio práctico: Implementar una herramienta de copia que maneje archivos de texto y binarios, validando argumentos de línea de comandos.


import sys

if len(sys.argv) != 3:
    print('Uso: copiar_archivo origen destino')
    sys.exit(1)

origen, destino = sys.argv[1], sys.argv[2]

with open(origen, 'rb') as fuente, open(destino, 'wb') as destino_final:
    for chunk in fuente:
        destino_final.write(chunk)

Movimiento del Cursor dentro del Archivo

El método read(n) tiane un comportamiento variable: en modo texto lee n caracteres, mientras que en modo binario lee n bytes. Los métodos seek(), tollow() y truncate() operan en bytes. seek() admite tres modos: 0 (inicio), 1 (posición actual), 2 (fin); los modos 1 y 2 requieren modo binario.

Simulación de la función tail -f:


import time

with open('registro.log', 'rb') as archivo:
    archivo.seek(0, 2)  # Mover al final del archivo
    while True:
        linea = archivo.readline()
        if linea:
            print(linea.decode('utf-8'))
        else:
            time.sleep(0.2)

Modificación de Archivos

Los archivos en disco solo permiten sobrescritura, no edición directa. Existen dos estrategias para simular modificaciones:

Enfoque 1: Carga completa en memoria. Adecuado para archivos pequeños.


import os

with open('original.txt') as lector, open('temporal.txt', 'w') as escritor:
    contenido = lector.read()
    contenido_modificado = contenido.replace('patron_antiguo', 'patron_nuevo')
    escritor.write(contenido_modificado)

os.remove('original.txt')
os.rename('temporal.txt', 'original.txt')

Enfoque 2: Proceasmiento línea por línea. Más eficiente para archivos grandes.


import os

with open('original.txt') as lector, open('temporal.txt', 'w') as escritor:
    for linea in lector:
        linea_modificada = linea.replace('patron_antiguo', 'patron_nuevo')
        escritor.write(linea_modificada)

os.remove('original.txt')
os.rename('temporal.txt', 'original.txt')

Ejercicios adicionales incluyen calcular el costo total de compras a partir de un archivo de productos y aplicar reemplazos de cadenas en archivos.

Etiquetas: Python Archivo Modos de Archivo Métodos de Archivo Cursor de Archivo

Publicado el 6-12 17:39