Leer un archivo en Python es un for. Pero el ejemplo típico tiene un fallo que se ve a simple vista —salen líneas en blanco de más— y hay un error que tarde o temprano te encuentras: UnicodeDecodeError.
También te puede interesar
os de toda la vida, que trabaja con cadenas, y pathlib, que trabaja con objetos Path y es lo que se recomienda hoy. Los ejemplos de esta página usan pathlib; cuando el equivalente con os es distinto, lo indicamos. Y una diferencia con la versión anterior de la página: ya no aparecen rutas como /home/decodigo/Documentos/…, que solo existían en el ordenador de quien la escribió.Línea a línea, y el problema de las líneas en blanco
from pathlib import Path
ruta = Path("salida/notas.txt")
with ruta.open(encoding="utf-8") as archivo:
for linea in archivo:
print(linea)salidaPrimera línea Segunda línea Tercera línea
Este era el ejemplo de la versión anterior, y sale con una línea en blanco entre cada línea. Cada linea trae su propio \n al final, y print añade otro. Se arregla quitándolo:
with ruta.open(encoding="utf-8") as archivo:
for linea in archivo:
print(linea.rstrip("\n"))salidaPrimera línea Segunda línea Tercera línea
Recorrer el archivo así lee una línea cada vez, sin cargarlo entero en memoria. Es la forma correcta para archivos grandes, como un registro de varios gigas.
Todo de golpe
print(repr(ruta.read_text(encoding="utf-8"))) print(ruta.read_text(encoding="utf-8").splitlines())
salida'Primera línea\nSegunda línea\nTercera línea\n' ['Primera línea', 'Segunda línea', 'Tercera línea']
read_text devuelve el archivo entero como una cadena; splitlines() la parte en una lista, ya sin los saltos. Para archivos pequeños —configuración, una plantilla— es lo más cómodo.
Contar líneas sin cargar el archivo
with ruta.open(encoding="utf-8") as f:
print("número de líneas:", sum(1 for _ in f))salidanúmero de líneas: 3
UnicodeDecodeError
Path("salida/latin1.txt").read_text(encoding="utf-8")salidaUnicodeDecodeError: 'utf-8' codec can't decode byte 0xf3 in position 5: invalid continuation byte
Significa que el archivo no está en la codificación que dijiste. Este es un «canción» guardado en Latin-1, la codificación de muchos programas antiguos de Windows, donde la «ó» es el byte 0xf3. Si sabes cuál es, se lee sin más:
Path("salida/latin1.txt").read_text(encoding="latin-1")salidacanción
errors="ignore": las letras que no entiende desaparecen sin aviso. Si no sabes la codificación, errors="replace" al menos deja un � donde había algo raro, y así lo ves.Si el archivo no está
salidaFileNotFoundError: [Errno 2] No such file or directory: 'no_existe.txt'
Se captura con except FileNotFoundError. Lo explicamos con más detalle en errores y excepciones.
Más información en inglés: Read a txt file in Python.
Todo el código se ejecutó con Python 3.14 en un contenedor limpio antes de publicar esta página; las salidas están copiadas de esa ejecución.