Los archivos de texto son una forma sencilla de guardar información entre ejecuciones de un programa. Se utilizan para configuraciones, registros, listas, notas, exportaciones y pequeños proyectos que todavía no necesitan una base de datos. Python incluye todo lo necesario para abrir, leer, escribir y procesar estos archivos sin instalar bibliotecas externas.
En esta guía aprenderás a trabajar con archivos de texto en Python usando open(), context managers, codificación UTF-8 y pathlib. También veremos cómo leer archivos grandes línea por línea, añadir contenido, controlar errores y evitar sobrescribir datos por accidente.
Cómo abrir un archivo de texto
La función integrada open() recibe la ruta, el modo de apertura y la codificación. Para profundizar en rutas modernas, consulta la guía de pathlib en Python.
archivo = open("notas.txt", "r", encoding="utf-8")
contenido = archivo.read()
archivo.close()
print(contenido)Este ejemplo funciona, pero depende de que close() se ejecute. Si aparece una excepción antes, el recurso puede permanecer abierto más tiempo de lo necesario.
Usar with para cerrar automáticamente
La forma recomendada es utilizar with. El archivo se cierra al salir del bloque, incluso si ocurre un error.
with open("notas.txt", "r", encoding="utf-8") as archivo:
contenido = archivo.read()
print(contenido)Este patrón también se utiliza con conexiones de bases de datos y otros recursos que deben liberarse correctamente.
Modos de apertura
| Modo | Comportamiento |
|---|---|
r | Lee un archivo existente. |
w | Escribe desde cero y reemplaza el contenido anterior. |
a | Añade contenido al final. |
x | Crea un archivo nuevo y falla si ya existe. |
r+ | Permite leer y escribir un archivo existente. |
El modo w merece atención: si el archivo ya existe, su contenido se pierde. Para datos importantes, crea una copia o escribe primero en un archivo temporal.
Leer todo el contenido
with open("mensaje.txt", encoding="utf-8") as archivo:
texto = archivo.read()
print(texto)read() es cómodo para archivos pequeños. En documentos grandes puede consumir demasiada memoria porque carga todo a la vez.
Leer línea por línea
Los archivos son iterables. Puedes procesar cada línea sin cargar el documento completo.
with open("eventos.log", encoding="utf-8") as archivo:
for numero, linea in enumerate(archivo, start=1):
texto = linea.rstrip("\n")
print(f"{numero}: {texto}")La guía de enumerate() en Python explica cómo numerar líneas y registros sin mantener un contador manual.
Escribir contenido
contenido = "Primera línea\nSegunda línea\n"
with open("resultado.txt", "w", encoding="utf-8") as archivo:
archivo.write(contenido)Python no añade saltos automáticamente. Debes incluir \n cuando quieras separar líneas.
Escribir varias líneas
lenguajes = ["Python", "JavaScript", "Go"]
texto = "\n".join(lenguajes) + "\n"
with open("lenguajes.txt", "w", encoding="utf-8") as archivo:
archivo.write(texto)writelines() también es útil, pero no agrega separadores por sí solo.
Añadir contenido sin borrar lo anterior
from datetime import datetime
momento = datetime.now().isoformat(timespec="seconds")
with open("actividad.log", "a", encoding="utf-8") as archivo:
archivo.write(f"{momento} - aplicación iniciada\n")Para trabajar con fechas, zonas horarias y formatos consistentes, revisa la guía de datetime en Python.
Trabajar con pathlib
from pathlib import Path
ruta = Path("datos") / "notas.txt"
ruta.parent.mkdir(parents=True, exist_ok=True)
ruta.write_text("Contenido en UTF-8\n", encoding="utf-8")
texto = ruta.read_text(encoding="utf-8")
print(texto)read_text() y write_text() son ideales para archivos pequeños. Para streaming o control detallado, utiliza ruta.open().
Manejar errores específicos
from pathlib import Path
ruta = Path("configuracion.txt")
try:
contenido = ruta.read_text(encoding="utf-8")
except FileNotFoundError:
print(f"No existe el archivo: {ruta}")
except PermissionError:
print(f"No hay permiso para leer: {ruta}")
except UnicodeDecodeError as error:
print(f"La codificación no coincide: {error}")
else:
print(contenido)Captura excepciones concretas. La guía de try y except en Python muestra cómo manejar errores sin ocultar fallos de programación.
Procesar y ordenar un archivo
from pathlib import Path
origen = Path("nombres.txt")
destino = Path("nombres_limpios.txt")
with origen.open(encoding="utf-8") as archivo:
nombres = {
linea.strip().title()
for linea in archivo
if linea.strip()
}
resultado = "\n".join(sorted(nombres)) + "\n"
destino.write_text(resultado, encoding="utf-8")El conjunto elimina duplicados y sorted() genera un resultado ordenado. Puedes comparar ambos mecanismos en la guía de sort() y sorted() en Python.
Escritura más segura con un temporal
from pathlib import Path
ruta = Path("configuracion.txt")
temporal = ruta.with_suffix(".tmp")
temporal.write_text("modo=produccion\n", encoding="utf-8")
temporal.replace(ruta)La sustitución al final reduce el riesgo de dejar el archivo principal incompleto si el proceso se interrumpe.
Errores frecuentes
- Olvidar cerrar el archivo al no usar
with. - Abrir con
wy borrar contenido importante. - No especificar la codificación.
- Usar
read()con archivos enormes. - Eliminar espacios significativos con
strip(). - Ignorar errores de permisos o archivos ausentes.
- Construir rutas manualmente con separadores específicos del sistema.
Conclusión
Para trabajar con archivos de texto en Python de forma fiable, utiliza with, declara UTF-8, elige cuidadosamente el modo de apertura y procesa línea por línea cuando el archivo pueda ser grande. pathlib simplifica las rutas y las excepciones específicas hacen que los fallos sean comprensibles.
Antes de sobrescribir datos importantes, crea una copia o utiliza un archivo temporal. Estas prácticas evitan pérdidas de información y preparan el código para proyectos mayores.
Documentación oficial
Consulta la documentación oficial de Python sobre la función open() y la referencia completa del módulo pathlib para revisar modos de apertura, codificación, rutas y manejo de archivos.






