domingo, 27 de octubre de 2024

Lenguajes. Python.

Creación y acceso a archivos.

Hasta este momento todo lo que hemos podido hacer desde Python ha sido efímero, perdiéndose los resultados por carecer de medios para almacenarlos. Tampoco hemos podido acceder a datos externos, salvo lo que introduce el usuario mediante la función input(). Para evitar esto e incrementar la funcionalidad de nuestros primeros script (1) necesitamos aprender a escribir archivos externos que se puedan almacenar y también a acceder a ellos y a su contenido. Al menos lo primero es fundamental para que no se pierda el resultado de nuestro trabajo. 


Empezaremos por aprender los comandos básicos de manejo de ficheros, que se reducen a cuatro, dos para especificar el tipo de fichero (texto o binario) y uno complementario que comprende los dos modos principales  de trabajo: la lectura y la escritura de los archivos.
  • "r(read) es la opción que utiliza Python por defecto (si no se especifica nada) y nos permite abrir un fichero para lectura, pero da error si este fichero no existe, por lo que tendremos que saber de antemano que el fichero existe. Un ejemplo de uso es la presentación de un texto explicativo sobre el objetivo del algoritmo y su manejo. De este modo liberamos el algoritmo de información complementaria y podemos modificar ésta sin necesidad de modificar el propio algoritmo.
  • "w" (write) abre un fichero para escritura borrando la información que pudiera contener. Si el fichero no existe, lo crea, por lo que es útil para crear nuevos archivos y cuando trabajamos con archivos externos que interesa modificar sin acumular versiones diferentes del mismo.
  • "x" (create) crea un fichero para escribir en él. Si el fichero ya existe devuelve error, por lo que, al contrario que con "r", necesitamos saber que el fichero no existe. Es útil para generar nuevos archivos externos en los que guardar la información generada por el script, siempre y cuando sea necesario crear nuevos ficheros en cada proceso.
  • "a" (append) abre un fichero ya creado para escribir en él situando el cursor al final de su contenido, por lo que no se altera el contenido previo. Esto hace que sea útil cuando queremos añadir la información a la previamente guardada (incluyendo la generada por script diferentes al actual).
Los dos comandos relativos al tipo de contenido (texto o binario) son los siguientes:
  • "b" (binary) abre el fichero en modo binario (valores 0-1 en lugar de texto plano); ficheros como fotografías, archivos ejecutables, ficheros de LO-Writer o MO-Word, por ejemplo. 
  • "t" (text-mode) abre el fichero en modo texto plano.
Finalmente el signo "+" abre el archivo en modo lectura y escritura simultáneamente.

El modo de acceder/crear un fichero pasa por definir una variable (ej fichero) y asignar a ella...
  • la función de apertura: open()
  • el directorio y nombre del fichero: open("./NombreFichero.txt")
  • el modo de acceso: open("./NombreFichero.txt", "rt")
  • y la codificación:  open("./NombreFichero.txt", "rt", encoding="utf-8")
Obtendremos con resultado la instrucción fichero =  open("./NombreFichero.txt", "rt", encoding="utf-8") siempre que nuestro objetivo sea abrir en modo texto un fichero llamado NombreFichero.text, ubicado en el mismo directorio en que se encuentra el archivo Python desde el que se llama al citado archivo (2) empleando la codificación utf-8, que permite el reconocimiento de los caracteres propios del idioma (ñ, tildes...) (3)

Una vez abierto el fichero de tipo texto plano (existente en el directorio indicado) en modo lectura, asignamos el resultado de la función de lectura de su  contenido (fichero.read()) a una variable (texto=fichero.read()) y (por ejemplo) posteriormente imprimimos en pantalla el contenido asignando a la dirección de memoria que se identifica con dicha variable (print(texto)). Finalmente cerramos el acceso al fichero mediante la función close()fichero.close().

En el archivo ficheros1.py te dejo lo anteriormente explicado junto con otros cuatro script que se explican mediante comentarios. Cada uno de ellos realiza una función diferente, aunque similar, por lo que te da idea de las opciones disponibles en cuanto a la lectura de archivos. Estos script están comentados, por lo que no están activos. Deberás eliminar esos comentarios para probar su funcionamiento. También te dejo acceso al archivo .txt utilizado en esta práctica, aunque puedes sustituirlo por el que tu prefieras siempre que mantengas el nombre actual o modifiques el nombre del archivo en los script.

#Lectura de ficheros de texto con Python

#Apertura, lectura y cierre de un fichero existente
print("Lectura de archivo completo -------------")
fichero=open('./prueba.txt','rt',encoding="utf-8"))
texto=fichero.read()
print(texto)
fichero.close()
#Apertura y lectura de un fichero línea a línea
print("Lectura del archivo línea a línea -----------------")
for linea in open("prueba.txt","rt",encoding="utf-8")):
    print(linea)
#Lectura línea a línea con readline()
print("Lectura de la primera línea del archivo ----------------")
fichero=open("prueba.txt","rt",encoding="utf-8"))
print(fichero.readline())
fichero.close
"""
#Lectura línea a línea mediante readlines()
"""
print("Lectura de las líneas como elementos de lista ----------------")
fichero=open("prueba.txt","rt",encoding="utf-8"))
lineas=fichero.readlines()
fichero.close()
print(lineas[1])
print(lineas[3])
#Lectura mediante bucle con función list()
print("Lectura de las líneas mediante bucle y list() -----------------------")
fichero=open("prueba.txt","r",encoding="utf-8"))
lineas=list(fichero)
fichero.close()
for item in lineas:
    print(item)
#Mantenimiento de script en pantalla
print("Pulsa INTRO para finalizar")
input()


Para el correcto funcionamiento del conjunto, deberás incluir ambos archivos (.py y .txt) dentro de una carpeta o subdirectorio creado en tu escritorio (4).

NOTAS

(1) Y en buena lógica, empezar a pensar en crear algo de utilidad práctica. Por suerte, y aunque sea aun de forma muy limitada, no nos falta mucho para obtener resultados prácticos con Python.
(2) En este caso estaríamos definiendo una ruta relativa, que también admite como dirección o ruta NombreFichero.txt. Si deseáramos utilizar una ruta absoluta deberíamos escribirla completa, por ejemplo, C:\Users\NombreUsuario\Desktop\BLOG\ORIENTACIONyPROGRAMACION\python\NombreFichero.txt
(3) La expresión encoding="utf-8" puede dar error, además de ser innecesaria, según comprobación propia en Windows10 sobre archivo creado con Bloc de notas e intérprete Python 3.10.0. En ese caso (del que no he encontrado explicación) prueba eliminando encoding="utf-8".
(4) La ubicación propuesta es orientativa, ya que siempre que ambos estén ubicados en la misma carpeta, cualquier otra opción será válida dado que en los script se usan rutas relativas.

No hay comentarios:

Publicar un comentario

Comenta esta entrada