Trabajando con archivos: apertura, lectura y escritura
Introducción
El manejo de archivos es una habilidad fundamental para cualquier programador, ya que permite almacenar y recuperar datos de forma persistente. En Python, trabajar con archivos es sorprendentemente sencillo gracias a sus funciones integradas y su sintaxis clara. Dominar estas operaciones te permitirá crear programas que guarden configuraciones, procesen datos o generen informes. En este artículo, exploraremos cómo abrir, leer y escribir archivos en Python, sentando las bases para el desarrollo de aplicaciones que puedan manejar datos persistentes.
Apertura de archivos
Para trabajar con un archivo en Python, primero debemos abrirlo. Esto se hace mediante la función open()
.
Sintaxis básica
archivo = open(ruta_archivo, modo)
Donde:
ruta_archivo
: Es la ruta donde se encuentra el archivo (puede ser relativa o absoluta)modo
: Especifica cómo queremos abrir el archivo (lectura, escritura, etc.)
Modos de apertura
Python ofrece varios modos para abrir archivos:
Modo | Descripción |
---|---|
'r' |
Lectura (predeterminado). Abre el archivo para leer; error si no existe. |
'w' |
Escritura. Crea el archivo si no existe o lo trunca si existe. |
'a' |
Anexar. Abre para escritura, creando el archivo si no existe; los datos se añaden al final. |
'x' |
Creación exclusiva. Falla si el archivo ya existe. |
'b' |
Modo binario (agregado a otros modos: 'rb' , 'wb' ). |
't' |
Modo texto (predeterminado, agregado a otros modos: 'rt' , 'wt' ). |
'+' |
Actualización (lectura y escritura, agregado a otros modos: 'r+' , 'w+' ). |
Ejemplos de apertura
# Abrir para lectura (modo predeterminado)
archivo_lectura = open("datos.txt", "r")
# Abrir para escritura (sobrescribe el contenido existente)
archivo_escritura = open("salida.txt", "w")
# Abrir para añadir contenido al final
archivo_anexar = open("registro.txt", "a")
# Abrir archivo binario para lectura
archivo_binario = open("imagen.jpg", "rb")
# Abrir para lectura y escritura
archivo_actualizar = open("configuracion.txt", "r+")
Cierre de archivos
Después de trabajar con un archivo, es fundamental cerrarlo para liberar recursos del sistema.
archivo = open("datos.txt", "r")
# Operaciones con el archivo...
archivo.close() # Cerrar el archivo cuando ya no lo necesitamos
El patrón with
(contexto)
La forma recomendada de trabajar con archivos es usando el patrón with
, que garantiza que el archivo se cierre correctamente incluso si ocurren errores:
# Utilizando el patrón with (recomendado)
with open("datos.txt", "r") as archivo:
# Operaciones con el archivo...
contenido = archivo.read()
# Al salir del bloque with, el archivo se cierra automáticamente
Lectura de archivos
Python ofrece varios métodos para leer el contenido de un archivo.
Método read()
Lee todo el contenido del archivo como una cadena:
with open("ejemplo.txt", "r", encoding="utf-8") as archivo:
contenido = archivo.read()
print(contenido)
También puedes especificar cuántos caracteres leer:
with open("ejemplo.txt", "r") as archivo:
primeros_50 = archivo.read(50) # Lee los primeros 50 caracteres
print(primeros_50)
Método readline()
Lee una línea del archivo cada vez:
with open("ejemplo.txt", "r") as archivo:
primera_linea = archivo.readline()
segunda_linea = archivo.readline()
print(primera_linea)
print(segunda_linea)
Método readlines()
Lee todas las líneas y las devuelve como una lista:
with open("ejemplo.txt", "r") as archivo:
lineas = archivo.readlines()
print(lineas) # Lista donde cada elemento es una línea del archivo
Iteración directa
La forma más elegante y eficiente de recorrer un archivo línea por línea:
with open("ejemplo.txt", "r") as archivo:
for linea in archivo:
print(linea.strip()) # strip() elimina espacios en blanco y saltos de línea
Escritura en archivos
Para escribir en archivos, utilizamos los métodos write()
y writelines()
.
Método write()
Escribe una cadena en el archivo:
with open("salida.txt", "w", encoding="utf-8") as archivo:
archivo.write("Hola, mundo!\n")
archivo.write("Esta es la segunda línea.")
Método writelines()
Escribe una lista de cadenas en el archivo:
lineas = ["Primera línea\n", "Segunda línea\n", "Tercera línea\n"]
with open("salida.txt", "w") as archivo:
archivo.writelines(lineas)
Ten en cuenta que writelines()
no añade automáticamente saltos de línea, debes incluirlos explícitamente si los necesitas.
Posicionamiento en archivos
A veces necesitamos leer o escribir en posiciones específicas del archivo.
Método seek()
Mueve el cursor a una posición determinada:
with open("datos.txt", "r") as archivo:
archivo.seek(10) # Mueve el cursor a la posición 10
datos = archivo.read(5) # Lee 5 caracteres desde la posición 10
Método tell()
Devuelve la posición actual del cursor:
with open("datos.txt", "r") as archivo:
posicion = archivo.tell() # Obtiene la posición actual
print(f"Posición actual: {posicion}")
Manejo de archivos con codificación
Cuando trabajamos con textos que contienen caracteres especiales (como tildes, ñ, etc.), es importante especificar la codificación:
# Lectura con codificación UTF-8
with open("texto_español.txt", "r", encoding="utf-8") as archivo:
contenido = archivo.read()
print(contenido)
# Escritura con codificación UTF-8
with open("salida_español.txt", "w", encoding="utf-8") as archivo:
archivo.write("¡Hola, cómo estás! Ñandú.")
Ejemplos prácticos
Ejemplo 1: Contar líneas, palabras y caracteres
def contar_estadisticas(nombre_archivo):
lineas = 0
palabras = 0
caracteres = 0
with open(nombre_archivo, "r", encoding="utf-8") as archivo:
for linea in archivo:
lineas += 1
caracteres += len(linea)
palabras += len(linea.split())
return lineas, palabras, caracteres
# Uso de la función
archivo_texto = "ejemplo.txt"
l, p, c = contar_estadisticas(archivo_texto)
print(f"El archivo {archivo_texto} tiene:")
print(f"- {l} líneas")
print(f"- {p} palabras")
print(f"- {c} caracteres")
Ejemplo 2: Copiar un archivo
def copiar_archivo(origen, destino):
try:
with open(origen, "r", encoding="utf-8") as archivo_origen:
contenido = archivo_origen.read()
with open(destino, "w", encoding="utf-8") as archivo_destino:
archivo_destino.write(contenido)
print(f"Se copió el contenido de {origen} a {destino} correctamente.")
except FileNotFoundError:
print(f"Error: No se encontró el archivo {origen}.")
except Exception as e:
print(f"Ocurrió un error: {e}")
# Uso de la función
copiar_archivo("original.txt", "copia.txt")
Ejemplo 3: Registrar información en un archivo de log
from datetime import datetime
def registrar_evento(mensaje):
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
with open("registro.log", "a", encoding="utf-8") as log:
log.write(f"[{timestamp}] {mensaje}\n")
# Uso de la función
registrar_evento("Aplicación iniciada")
registrar_evento("Usuario ha iniciado sesión")
registrar_evento("Operación completada con éxito")
Resumen
El manejo de archivos en Python es una habilidad esencial que permite crear programas capaces de almacenar y procesar datos de forma persistente. Hemos aprendido cómo abrir archivos en diferentes modos, leer su contenido de varias formas, escribir información y posicionarnos en puntos específicos del archivo. El patrón with
nos garantiza un cierre adecuado de los archivos, evitando problemas de recursos. Con estas herramientas, podemos desarrollar aplicaciones que trabajen eficientemente con datos almacenados en el sistema de archivos. En el próximo artículo, exploraremos cómo gestionar rutas y directorios, lo que complementará nuestro conocimiento sobre el manejo de archivos en Python.