Ir al contenido principal

Cómo leer un archivo línea por línea en Python

Aprende patrones prácticos para trabajar con archivos de texto, registros y grandes conjuntos de datos en Python.
Actualizado 24 ene 2026  · 6 min leer

Python ofrece varias formas de leer archivos línea por línea y, a primera vista, todas ellas pueden parecer intercambiables. Sin embargo, en la práctica, la elección que hagas afecta al uso de la memoria, al rendimiento e incluso a la legibilidad de tu código. Algunos enfoques se adaptan perfectamente a archivos grandes, mientras que otros introducen problemas sin que sea evidente.

En este tutorial, aprenderás la forma recomendada de leer un archivo línea por línea en Python y por qué debería ser tu opción predeterminada. También analizaremos algunas alternativas, explicaremos cuándo tienen sentido y señalaremos los errores comunes que suelen confundir a la gente. Al final, podrás leer archivos con confianza y eficiencia, tanto si estás escribiendo un script rápido como si estás haciendo algo más complejo.

La forma recomendada de leer un archivo línea por línea en Python

Si solo recuerdas un patrón de este artículo, que sea este. En la mayoría de los casos, iterar directamente sobre un objeto de archivo es la forma más sencilla, segura y eficaz de leer un archivo línea por línea, y es el enfoque que se utiliza con más frecuencia en el código Python real.

En un nivel básico, un objeto de archivo en Python ya es un iterador. Esto significa que puedes recorrerlo directamente y obtener una línea cada vez:

with open("example.txt", "r", encoding="utf-8") as file:
    for line in file:
        print(line)

Hace exactamente lo que parece. Python abre el archivo y genera cada línea una por una a medida que se ejecuta el bucle. No hay indexación manual, ni llamadas a funciones adicionales, ni complejidad oculta.

Una de las mayores ventajas de este enfoque es la eficiencia de la memoria. Python no carga todo el archivo en la memoria. En su lugar, lee una sola línea, la procesa y pasa a la siguiente. Esto hace que este patrón sea seguro incluso para archivos muy grandes, como registros o exportaciones de datos sin procesar.

También es la solución más «Python». Iterar directamente sobre un objeto de archivo es claro, legible y fácilmente comprensible para cualquiera que esté familiarizado con Python. Esto es importante a medida que los scripts crecen o cuando otras personas necesitan leer tu código más adelante.

Debido a estas ventajas, esta debería ser tu opción predeterminada, a menos que tengas una razón muy específica para hacer otra cosa. Maneja automáticamente archivos grandes, se adapta bien al aumento del tamaño de los archivos y evita el uso innecesario de memoria, todo ello sin añadir complejidad adicional.

Manejo de saltos de línea y espacios en blanco al leer líneas en Python

Si alguna vez has impreso líneas de un archivo y has notado líneas en blanco inesperadas o te has preguntado por qué las cadenas no se ven del todo bien, te has encontrado con el comportamiento de nueva línea de Python. Este es uno de los problemas más comunes entre los principiantes, y vale la pena comprenderlo desde el principio. 

Cuando Python lee un archivo línea por línea, cada línea suele terminar con un carácter de nueva línea (\n). Esa nueva línea forma parte de la línea en sí, no es algo que Python añada posteriormente. 

Por ejemplo, un archivo que tiene este aspecto:

apple
banana
cherry

en realidad se lee como: 

apple\n, banana\n y cherry\n.

Este comportamiento conserva la estructura original del archivo, lo cual es importante cuando el formato es relevante. Pero cuando procesas texto, probablemente comparando valores, analizando datos o limpiando entradas, a menudo deseas eliminar esos espacios en blanco adicionales.

Líneas de limpieza para procesamiento

La solución más habitual es eliminar los espacios en blanco antes de utilizar cada línea:

with open("data.txt", encoding="utf-8") as file:
    for line in file:
        clean_line = line.strip()
        print(clean_line)

El método ` strip() ` elimina los espacios en blanco iniciales y finales, incluidos los espacios, las tabulaciones y los caracteres de nueva línea. Esto es lo que normalmente se desea cuando:

  • Comparación de líneas con valores esperados
  • Convertir cadenas en números
  • Creación de datos estructurados a partir del contenido de archivos

Patrones comunes de espacios en blanco

Dependiendo de tu caso de uso, puede que sean más adecuados métodos más específicos:

  • line.strip() elimina los espacios en blanco de ambos extremos

  • line.rstrip() elimina los espacios en blanco del lado derecho

  • line.rstrip("\n") elimina solo el carácter de nueva línea

Por ejemplo, si la sangría es importante, pero las líneas nuevas al final no lo son:

clean_line = line.rstrip("\n")

Cuándo no quitar las líneas

Es igual de importante saber cuándo no eliminar los espacios en blanco. Si trabajas con:

  • Texto preformateado
  • Archivos de ancho fijo
  • Troncos en los que el espaciado es importante
  • Markdown o fragmentos de código

Eliminar los espacios en blanco puede romper la estructura de los datos. En esos casos, trabaja con las líneas sin formato y gestiona el formato de forma intencionada.

Una buena regla general: elimina las líneas cuando proceses contenido; conserva los espacios en blanco cuando el formato sea importante.

Cómo llevar un registro de los números de línea en Python

Una vez que estás leyendo archivos línea por línea, es habitual querer saber en qué línea te encuentras. Esto resulta especialmente útil para registros, errores de validación y depuración de archivos de entrada desordenados.

Python facilita esta tarea mediante la función integrada ` enumerate() `:

with open("data.txt", encoding="utf-8") as file:
    for line_number, line in enumerate(file, start=1):
        print(line_number, line.strip())

Esto es lo que está pasando:

  • El archivo sigue generando una línea cada vez.

  • enumerate() añade un contador junto a cada línea

  • start=1 coincide con la forma en que los humanos contáis las líneas

Este patrón sigue siendo eficiente en cuanto a memoria y funciona igual de bien con archivos grandes.

Cuando los números de línea importan

El seguimiento de los números de línea resulta especialmente útil para:

  • Registros: identificación del lugar donde se produjo un evento.
  • Validación: informar exactamente dónde aparecen los datos erróneos.
  • Depuración: seguimiento de errores de análisis sintáctico
  • Comentariosde los usuarios: señalar una línea específica en un archivo de entrada

Dado que enumerate() mantiene el código limpio y legible, casi siempre es mejor que gestionar un contador manual.

Usar readline() para leer una línea a la vez en Python

Python también ofrece una opción más manual: readline(). No lo necesitarás a menudo, pero comprenderlo te ayudará a reconocer cuándo es apropiado.

El método ` readline() ` lee una sola línea cada vez que se llama. Cuando el archivo se agota, devuelve una cadena vacía:

with open("example.txt", encoding="utf-8") as file:
    line = file.readline()
    while line:
        print(line.strip())
        line = file.readline()

Cuando readline() tiene sentido

readline() Es útil cuando la lectura debe ser condicional o estar estrictamente controlada, como por ejemplo:

  • Programas interactivos
  • Detenerte tan pronto como se cumpla una condición.
  • Mezcla de lectura de archivos con lógica compleja

Por ejemplo:

with open("log.txt", encoding="utf-8") as file:
    while True:
        line = file.readline()
        if not line or "ERROR" in line:
            break
        print(line.strip())

Por qué normalmente no es mejor que el bucle predeterminado

En la mayoría de los casos, esto sigue siendo mejor:

for line in file:
    process(line)

Es más corto, más claro, igual de eficaz y más difícil de utilizar de forma incorrecta. Piensa en readline() como una herramienta para casos especiales, no como un sustituto del bucle estándar.

Por qué readlines() suele ser una mala idea para archivos grandes

El método ` readlines() ` lee todo el archivo en la memoria y devuelve una lista de líneas:

with open("example.txt", encoding="utf-8") as file:
    lines = file.readlines()

Esto funciona para archivos pequeños, pero no es escalable.

Porque todo el archivo se carga de una sola vez:

  • El uso de memoria aumenta con el tamaño del archivo.
  • Los archivos grandes pueden ralentizar tu programa o provocar su bloqueo.
  • Los problemas suelen aparecer solo en la producción.

Cuando readlines() es aceptable

Es razonable cuando:

  • Se garantiza que el archivo es pequeño.
  • Realmente necesitas todas las líneas a la vez.
  • El tamaño es predecible y limitado.

De lo contrario, iterar línea por línea es casi siempre la mejor opción.

Errores comunes al leer archivos línea por línea

La mayoría de los problemas se deben a unos pequeños descuidos:

  • Olvidar cerrar archivos → Usar with

  • Carga involuntaria de archivos completos → Evita read() y readlines()

  • Ignorar codificaciones → Especificar UTF-8 explícitamente

  • Confusión entre los modos texto y binario → Utiliza "r" para texto y "rb" para binario.

Una vez que eres consciente de ellos, es fácil evitarlos.

Mejores prácticas para leer archivos línea por línea en Python

Antes de terminar, aquí tienes una breve lista de verificación para mantener tu código limpio y fiable:

  • Utiliza el objeto de archivo como iterador de forma predeterminada.
  • Eliminar los espacios en blanco de forma intencionada, no automática.
  • Evita cargar archivos completos a menos que sea necesario.
  • Maneja las codificaciones de forma explícita cuando trabajes con texto.

Estos hábitos abarcan desde scripts rápidos hasta procesos de producción.

Conclusión

Cuando se trata de leer un archivo línea por línea en Python, hay una opción predeterminada clara: iterar directamente sobre el objeto de archivo. Es sencillo, eficiente en cuanto a memoria y lo suficientemente expresivo como para manejar desde pequeños archivos de texto hasta registros masivos.

El diseño de Python hace que este patrón resulte natural. No necesitas utilidades especiales ni lógica compleja, ya que el lenguaje se encarga de las partes difíciles por ti. La mayoría de los problemas no surgen del propio Python, sino de complicar en exceso una tarea que ya tiene una solución clara.

Sigue el enfoque basado en iteradores, presta atención a los espacios en blanco y las codificaciones, y tu código de lectura de archivos seguirá siendo legible y fácil de entender.

Preguntas frecuentes

¿Leer un archivo línea por línea siempre es más lento que leerlo de una sola vez?

No. De hecho, en el caso de archivos grandes, la lectura línea por línea suele ser más rápida en general, ya que evita la presión sobre la memoria. Cargar un archivo completo en la memoria puede ralentizar tu programa o provocar que se bloquee, mientras que la iteración línea por línea mantiene constante el uso de la memoria.

¿Por qué Python incluye caracteres de nueva línea (\n) en cada línea?

Porque Python conserva el archivo exactamente tal y como existe en el disco. Las nuevas líneas forman parte de los datos, no son un formato añadido posteriormente. Esto hace que la lectura de archivos sea predecible y flexible: tú decides cuándo y cómo limpiar el texto, en lugar de que Python lo haga por ti.

¿Debo usar siempre strip() al leer líneas?

No siempre. Utiliza strip() cuando proceses valores, compares cadenas o limpies entradas. Evítalo cuando los espacios en blanco tengan significado, como en registros, texto formateado, archivos de ancho fijo o fragmentos de código.

¿Es readline() mejor que for line in file?

Rara vez, pero a veces. readline() tiene sentido cuando la lectura debe detenerse de forma condicional o interactiva. Para la mayoría de las tareas de procesamiento por lotes, el bucle estándar es más claro, más seguro e igual de eficiente.

Piensa en readline() como una herramienta para casos extremos, no como un sustituto general.

¿Cuál es el mayor error que comete la gente al leer archivos línea por línea?

Lo estás complicando demasiado. La mayoría de los errores se deben a la carga innecesaria de archivos completos, al manejo incorrecto de las codificaciones o a la adición de contadores manuales y estados cuando Python ya ofrece una solución limpia.

Temas

Aprende Python con DataCamp

programa

Desarrollador Python Asociado

32 h
Aprende Python para desarrollar software, desde escribir funciones hasta definir clases. ¡Adquiere los conocimientos necesarios para poner en marcha tu carrera de desarrollador!
Ver detallesRight Arrow
Iniciar curso
Ver másRight Arrow
Relacionado

Tutorial

Tutorial de módulos de Python: Importarlos, escribirlos y utilizarlos

Aprende a crear e importar módulos de Python. ¡Descubre las mejores prácticas, ejemplos y consejos para escribir código Python reutilizable, organizado y eficiente!

Nishant Kumar

Tutorial

Tutorial de Excel en Python: La guía definitiva

Aprende a leer e importar archivos Excel en Python, a escribir datos en estas hojas de cálculo y a encontrar los mejores paquetes para hacerlo.
Natassha Selvaraj's photo

Natassha Selvaraj

Tutorial

Tutorial sobre bucle for en Python

Aprende a implementar bucle «for» en Python para iterar una secuencia o las filas y columnas de un DataFrame.
Aditya Sharma's photo

Aditya Sharma

Tutorial

Tutorial de minería de reglas de asociación en Python

Descubrir patrones ocultos en Python con minería de reglas de asociación
Moez Ali's photo

Moez Ali

Tutorial

Multiprocesamiento en Python: Guía de hilos y procesos

Aprende a gestionar hilos y procesos con el módulo de multiprocesamiento de Python. Descubre las técnicas clave de la programación paralela. Mejora la eficacia de tu código con ejemplos.
Kurtis Pykes 's photo

Kurtis Pykes

Tutorial

Arreglos en Python

Arreglos de Python con ejemplos de código. ¡Aprende hoy mismo a crear e imprimir arreglos con Python NumPy!
DataCamp Team's photo

DataCamp Team

Ver másVer más