Leer archivos de texto TXT con Python

Leer archivos de texto TXT con Python

Esta vez, te voy a enseñar muchas cosas sobre el manejo de archivos de texto txt desde Python. Toma esto como una introducción al manejo de archivos con Python, ya que manejaremos más tipos de archivos en el curso.

Esta es la primera parte del curso de manejo de archivos txt. Lo he dividido en varias partes con el fin de que no queden páginas muy largas.

El manejo de archivos de texto en Python es muy sencillo gracias a las funciones integradas en el lenguaje. A continuación, te mostraré algunos ejemplos de código para que veas cómo abrir, leer, escribir y cerrar archivos de texto .txt en Python.

Abrir un archivo de texto TXT con Python


Para abrir un archivo de texto, se utiliza la función predefinida open(). Por ejemplo, si deseamos abrir un archivo llamado "ejemplo.txt" en modo lectura (el modo predeterminado es lectura si no se especifica), el código sería el siguiente:

archivo = open("test.txt")

Modo lectura y modo escritura

Para quien no conoce mucho los temas de permisos de archivo, modo lectura, es solo leer el archivos. No se hace ningún cambio en él, no se escriben datos. En cambio, el modo escritura, es el que permite realizar cambios en el archivo.

Vamos a crear el archivo. Lo voy a dejar en la misma ruta (misma carpeta) que el archivo .py donde escriba el código. Si el archivo está en una ruta diferente, lo debes indicar en los paréntesis del open().

txt python

Ahora, coloca alguna frase en el archivo de texto. Yo voy a poner lo siguiente:

www.programacionfacil.org

Leer y almacenar el contenido de un txt en Python

Ahora, por mucho que ejecutes la línea de código de Python, no te saldrá nada en la consola, debes indicar que se lea el contenido del archivo txt. Lo puedes almacenar en una variable para después imprimirlo en la consola o utilizarlo en cualquier parte de tu código.

# Se abre el archivo
archivo = open("test.txt")
# Se lee y almacena
lectura = archivo.read()
# Se imprime en la consola
print(lectura)

Finalmente, lo que saca el print(), es lo mismo que contiene el archivo de texto.

Resultado en la consola

www.programacionfacil.org

Cerrar los archivos txt abiertos

Después de abrir un archivo txt y utilizarlo, es conveniente cerrarlo, para evitar posibles errores y consumo de recursos extra.

Para cerrar un archivo, solo tienes que utilizar el método close().

# Se abre el archivo
archivo = open("test.txt")
# Se lee y almacena
lectura = archivo.read()
# Se imprime en la consola
print(lectura)
# Se cierra el archivo
archivo.close()

El uso de with open en Python

En Python, disponemos del bloque with. Gracias a él, podremos abrir un archivo y cerrarlo al finalizar el bloque, sin tener que especificarlo. De esta forma, evitaremos cometer el error de olvidar la llamada al método close() cada vez que abramos un archivo.

En lugar de almacenar el archivo en una variable, le damos un alias, así podemos utilizarlo.

# Se abre el archivo y se cierra al finalizar el bloque
with open("test.txt") as archivo:
    # Se lee y almacena
    lectura = archivo.read()
    print(lectura)

En el open(), se puede especificar con un segundo argumento, si queremos abrir el archivo en modo lectura o escritura. Con una "r" de read (lectura en español), indicamos que lo abra en modo lectura (valor por defecto si no se especifica).

Aunque este valor se quede por defecto, es conveniente especificarlo, para hacer más visible de que forma se va a utilizar el archivo.

Si quieres en modo lectura, con "w". Pero ten cuidado, porque puedes perder todo el contenido del archivo. Más abajo te explico como funciona este segundo modo.

Leer los archivos txt línea por línea

Ahora, copia y pega esto en tu archivo de texto:

Este archivo
contiene
varias
líneas.

Ejecuta el mismo código de antes para leer e imprimir el contenido.

Resultado en la consola

Este archivo
contiene
varias
là ­neas.

Aparece todo. Si te fijas, la codificación del acento sale de forma incorrecta. Esto lo solucionaremos luego.


El cursor en los archivos txt

Antes de continuar, para que entiendas bien todos los ejemplos, debes saber lo que es el cursor.

El cursor, en la interfaz gráfica, lo puedes ver. Es la barrita que parpadea y te indica donde vas a escribir o borrar algo con el teclado.

Al abrir un archivo con Python, el cursor se posiciona al principio del texto (el cursor, en mi tema de colores es lo que sale de color rojo-rosado:

archivo txt de texto con python

Leer la primera línea del archivo de texto

Para poder leer la primera línea de un archivo, solo tienes que utilizar el método readline().

# Se abre el archivo y se cierra al finalizar el bloque
with open("test.txt", "r") as archivo:
    # Se lee y almacena la primera línea
    lectura = archivo.readline()
    # Se imprime
    print(lectura)

Resultado en la consola

Este archivo

Leer línea por línea con readline()

Después, para seguir leyendo líneas, podemos poner más readline().

Por ejemplo, si quieres leer las tres primeras líneas, se puede hacer así:

# Se abre el archivo y se cierra al finalizar el bloque
with open("test.txt", "r") as archivo:
    # Se lee y almacena la primera línea
    lectura = archivo.readline()
    # Se lee y almacena la segunda línea
    lectura = archivo.readline()
    # Se lee y almacena la tercera línea
    lectura = archivo.readline()
    # Se imprime
    print(lectura)

Sin embargo, me aparece solo la tercera línea:

Resultado en la consola

varias

Esto ocurre, porque se está reasignado el valor de la variable lectura. Entonces, si queremos mostrar las tres líneas, podemos hacerlo así:

# Se abre el archivo y se cierra al finalizar el bloque
with open("test.txt", "r") as archivo:
    # Se lee y almacena la primera línea
    linea1 = archivo.readline()
    # Se lee y almacena la segunda línea
    linea2 = archivo.readline()
    # Se lee y almacena la tercera línea
    linea3 = archivo.readline()
    # Se imprimen las tres líneas
    print(linea1, linea2, linea3, sep="")

Resultado en la consola

Este archivo
contiene
varias

O también así:

# Se abre el archivo y se cierra al finalizar el bloque
with open("test.txt", "r") as archivo:
    # Se lee y almacena la primera línea
    lectura = archivo.readline()
    print(lectura)
    # Se lee y almacena la segunda línea
    lectura = archivo.readline()
    print(lectura)
    # Se lee y almacena la segunda línea
    lectura = archivo.readline()
    print(lectura)

Resultado en la consola

Este archivo

contiene

varias

Sin embargo, esto deja saltos de línea.

El argumento sep de print()

Esto está ocurriendo, porque en el primer ejemplo, utilizo el argumento sep="" con un string vacío. Este argumento sirve para indicar que se va a añadir después de cada coma. Le puedes poner cualquier string.

Por defecto, sep, deja un valor de un espacio, por eso, cuando concatenamos varios strings con comas en un print(), aparece ese espacio.

Después de cada línea, hay un salto de línea (tecla ENTER en el archivo txt), y si el separador es un string vacío, se come dicho salto de línea.

Imprimir líneas con un bucle for

Otra cosa más óptima cuando quieres sacar varias líneas, pero no todo el contenido, es utilizar un bucle, para no repetir tanto código. Con el range(3) indico que quiero que itere el archivo 3 veces, lo que me da, 3 líneas.

# Abrimos el archivo en modo lectura.
with open("test.txt", "r") as archivo:
    # Iteramos el archivo abierto con readline()
    for i in range(3):
        linea = archivo.readline()
        print(linea)

Resultado en la consola

Este archivo

contiene

varias

El método rstrip() con archivos de texto

Si no quieres que aparezcan estos molestos saltos de línea extra, puedes utilizar en este caso el método rstrip():

# Abrimos el archivo en modo lectura.
with open("test.txt", "r") as archivo:
    # Iteramos el archivo abierto con readline()
    for i in range(3):
        linea = archivo.readline().rstrip()
        print(linea)

Resultado en la consola

Este archivo
contiene
varias

¿Qué hace rstrip()?

rstrip() es un método en Python que se usa para eliminar los caracteres especificados al final de una cadena. Por defecto, si no se especifica ningún carácter, se eliminarán los espacios en blanco y los saltos de línea al final de la cadena.

Por ejemplo, si tenemos una cadena "Este archivo\n" y utilizamos el método rstrip(), la cadena resultante sería "Este archivo" sin el salto de línea al final. Es importante tener en cuenta que este método no modifica la cadena original, sino que devuelve una nueva cadena con los caracteres eliminados.

El método replace con archivos de texto

Hay otra solución para esto (entre muchas otras que tiene Python), que es mediante el uso del método replace(). Esta se suele utilizar, pero quizás no sea tan práctica en este sentido como rstrip. Se trata de decirle que elimine cualquier \n, reemplazándolo por una cadena vacía.

# Abrimos el archivo en modo lectura.
with open("test.txt", "r") as archivo:
    # Iteramos el archivo abierto con readline()
    for i in range(3):
        linea = archivo.readline().replace("\n", "")
        print(linea)

Leer ciertos caracteres de un archivo de texto con Python

Con readline, no solo podemos leer líneas completas, si no, que podemos indicar que de una línea en concreto, nos devuelva el número de caracteres que le indiquemos como argumento. Del primero, hasta llegar a ese número.

# Abrimos el archivo en modo lectura.
with open("test.txt", "r") as archivo:
    linea = archivo.readline(4)
    print(linea)

Resultado en la consola

Este

En el siguiente ejemplo, tenemos dos readline() con rangos de caracteres.
El primer readline(), devuelve los 5 primeros caracteres (Este y el espacio que tiene después).
En ese momento, el cursor, se queda en la última posición que ha estado, la 5, por lo que cuando le ejecuta el siguiente readline(), continúa 7 caracteres más en la siguiente línea de la consola:

# Abrimos el archivo en modo lectura.
with open("test.txt", "r") as archivo:
    linea = archivo.readline(4)
    print(linea)
    linea = archivo.readline(6)
    print(linea)

Resultado en la consola

Este
archi

Leer solo los primeros caracteres de varias líneas

Ahora, si quieres mostrar los 4 primeros caracteres de las 3 primeras líneas que hay en el archivo, ¿cómo lo harías?

Una forma que parece lógica, es esta. Darle un rango de 3, para ejecutar 3 readline() y en cada readline, leer los cuatro primeros caracteres.

with open("test.txt", "r") as archivo:
    for i in range(3):
        linea = archivo.readline(4)
        print(linea)

Resultado en la consola

Este
arc
hivo

Sin embargo, el puntero se queda en la misma línea, solo avanza de cuatro en cuatro caracteres.

Si utilizamos el string slicing, evitamos el comportamiento de readline() con el argumento (readline(n)).

Aquí, pasamos por las tres líneas. En cada print(), se imprimen solo los cuatro primeros caracteres.

with open("test.txt", "r") as archivo:
    for i in range(3):
        linea = archivo.readline()
        print(linea[:4])

Si no recuerdas o no sabes como va el string slicing de Python, haz click en el enlace: string slicing.

Acceso de lectura a archivos txt inexistentes

Si intentas abrir en modo lectura un archivo txt que no está creado, te dará el siguiente error de archivo no encontrado:

with open("archivo-inexistente.txt", "r") as archivo:
    pass

Resultado en la consola

FileNotFoundError: [Errno 2] No such file or directory: 'archivo-inexistente.txt'

Así que ya sabes, los archivos tienen que existir o los tienes que crear primero con el modo escritura, el cual, verás en la siguiente parte del curso.

Seguimos en el siguiente capítulo con más tareas para el manejo de archivos txt desde Python.

No te pierdas nada del curso Máster en Python.


Un comentario en «Leer archivos de texto TXT con Python»

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

curso de Python Entrada anterior Decorador para abrir y cerrar la conexión con el servidor MySQL en Python
curso de Python Entrada siguiente Escribir en archivos de texto TXT con Python