martes, 30 de septiembre de 2025

Textos. Python.


Acceso a archivos





Para completar el tema del manejo de archivos txt mediante Python, nos queda hablar de la lectura o acceso al contenido, cuestión ésta de gran interés para la creación de script potentes en cuando a su funcionalidad.


Hasta el momento hemos visto la [creación y apertura de un archivo] y [cómo escribir en él], pero desconocemos cómo podemos acceder a su contenido, siendo como es fundamental para el desarrollo de un script de cierta complejidad.

Explico a continuación las fases por las que pasa la lectura de un archivo, entendiendo lectura como sinónimo de acceso al contenido:
  • Primero: acceso al archivo, paso previo, común también al proceso de escritura.
  • Segundo: lectura del contenido. Dentro de esta segunda fase deberemos distinguir dos condiciones alternativas: si deseamos acceder al texto como un bloque o si nos interesa hacerlo línea por línea. Esta opción está determinada, fundamentalmente, por el modo en que se ha escrito el contenido en el archivo.
Veamos ahora cómo concretamos en código cada fase y cada opción, ya que todas ellas permiten diferente formulaciones, empezando por el acceso (y apertura) del archivo, acción que permite dos formulaciones: la básica…

Archivo = ‘texto.txt’ 
contenido = open(archivo,’r’, encoding=‘utf-8’)

Cuerpo de instrucciones

contenido.close()

… en donde cambiamos el segundo parámetro por ‘r’ (reader) para especificar la acción que vamos a aplicar sobre el archivo, y la simplificada, que nos ahora la función de cierre

with open(archivo,’r’, encoding=‘utf-8’) as contenido:  

La segunda parte del proceso se basa en la lectura del contenido que se realiza, en principio con la función o método read()

texto_leer = contenido.read()

… que almacena en texto_leer toda la información contenida en el archivo referenciado como  contenido.

Pero si el contenido el archivo fuera una lista de palabras (por ejemplo) que ocupara varias líneas (por ejemplo, los días de la semana), podríamos usar el mismo procedimiento, pero obtendríamos un texto único, no una lista de los días de las semana (1). Si necesitamos acceder a la lista podemos optar por crearla (lista= []) y usar un bucle for para recorrer el archivo abierto añadiendo (lista.append()) cada elemento a la lista, o puedes optar por usar la función readlines() y ahorrarte el bucle (2).

En este segundo caso depende, como ya dije, de cómo está “escrito” el contenido en el archivo. Empecemos por la forma más simple, suponiendo que el contenido del archivo es un texto formado por uno o varios párrafos y que nuestro interés es usar ese contenido para informar al usuario del script sobre el funcionamiento del mismo. En este supuesto, necesitamos leer el contenido y pasarlo a una variable-cadena que después mostraremos en pantalla. Para ello, sobre texto_lista.txt (listado de días de la semana)…

archivo = ‘texto_lista.txt’
lineas = []
docum = open(archivo,’r’, encoding=‘utf-8’)
lineas = docum.realdlines()
lin = len(lineas)
print(f’Número de elementos de la lista {lin}\n’)
for i in range(lin):
    print(lineas[i].rstrip())
docum.close()

Este script devuelve una lista de elementos formada por el contenido de cada una de las líneas del documento. La función len() nos permite ver que esa lista consta de 7 elementos y sirve de referencia para limitar el número de ciclos que recorre for (for i in range(lín)) (3).

Si quieres confirmar que lineas es una lista y no una cadena de caracteres, sólo tienes que solicitar que se imprima un elemento mediante…

print(lineas[0]) -> Te devuelve lunes (4)

… pero lo realmente interesante es el conjunto de posibilidades que te ofrece el uso de lineas como lista.

NOTAS

(1) La diferencia puede que no la apreciemos si pedimos imprimir la variable usada como referencia (vg. texto_leer), pero sí si queremos acceder a un elemento concreto de la lista. Por ejemplo print(texto_leer[0]) no nos devuelve Lunes, nos devuelve l (primer elemento (0) de la cadena)
(2) También disponemos de la función readline(), que lee y devuelve caracteres en forma de cadena hasta encontrar un salto de línea (\n).
(3) Recuerda que rstrip() sirve para eliminar los saltos de línea
(4) Si lineas fuera una cadena devolvería l