4.4 Escritura de archivos

Hasta ahora, todos los programas que vimos muestran el resultado por pantalla. Si nos interesa guardar la información que genera el programa, tenemos que guardarla o la misma se perderá al finalizar el programa. Obviamente, esto no es práctico cuando el programa genera gran cantidad de información, o cuando se le debe ingresar toda la información cada vez que se ejecuta el programa.

Para solucionar estos problemas, los lenguajes de programación permiten trabajar con archivos. El programa guarda en un archivo la información, y la misma se puede volver a leer la próxima vez que se ejecute el programa, sin necesidad de ingresarla nuevamente. El Python trabaja con varios formatos de archivos, el que vamos a ver ahora es el archivo de texto. Es uno de los formatos más sencillos y más difundidos, los archivos de texto se puede abrir con cualquier editor. 

Para ver cómo se trabaja con archivos, vamos a utilizar el siguiente programa:

Este programa, utilizando la función esprimo(), calcula y muestra por pantalla todos los números primos menores que 100. Lo que vamos a hacer es, además de mostrarlos por pantalla, guardarlos en un archivo, para poder seguir accediendo a la lista una vez finalizado el programa.

Simplemente agregamos tres líneas al programa para trabajar con archivos. En la línea 13 creamos un objeto de tipo archivo llamado arch. Y abrimos dicho archivo con el método open(). El método open() tiene dos parámetros. El primero es un string que contiene la ruta y el nombre que tendrá el archivo en el disco. Nuestro archivo se llamará "primos.txt". Como no le especificamos ninguna ruta, creará el archivo en la misma carpeta en la que está nuestro programa de python. La extensión del archivo puede ser cualquiera, es una buena práctica ponerle txt como extensión para indicar que es un archivo de texto. El segundo parámetro indica el modo en el que abriremos dicho archivo. En este caso, "w" indica que abrimos el archivo para escribir en él: Por lo tanto, si el archivo no existe lo crea, y si el archivo ya existía, borra su contenido previo y se prepara para escribir en él. Más adelante veremos otras formas en que se puede abrir un archivo.

En la línea 17, escribimos los datos en el archivo mediante el método write(). Este método tiene un único parámetro que es un string conteniendo los datos que queremos escribir en el archivo. Dado que es un archivo de texto, todo lo que escribamos en él deberá ser texto (strings). Es por ello que en vez de escribir simplemente i como hicimos en el print de la línea anterior, escribimos str(i), esto es convertir la variable entera i a string. Además le agregamos el caracter especial "\n" que indica fin de línea. Con esto logramos que cada número se escriba en el archivo en una línea nueva. Esta instrucción está dentro del ciclo for, por lo que se va a repetir tantas veces como números primos encuentre el programa.

Finalmente, en la línea 18 cerramos el archivo con el método close(). Este método realiza las tareas necesarias del sistema operativo para terminar de escribir y liberar el archivo. Esto es muy importante, ya que mientras el archivo esté abierto para escribir en él, está bloqueado: ningún otro programa puede acceder al archivo mientras estamos escribiendo. Además, es posible que, por una cuestión de eficiencia, no se escriba cada número en el momento exacto en que usamos el método write(): generalmente, el sistema operativo almancena varios datos a guardar en un área especial de la memoria llamada buffer y escribe en el archivo sólo cuando tiene una cantidad considerable de datos para guardar. El método close le dice al sistema operativo que escriba en el archivo todo lo que quede pendiente en el buffer antes de cerrarlo. Si no incluimos el método close(), se ejecutará automáticamente al finalizar el programa. Eso no es un inconveniente en un programa tan sencillo como este, pero puede traer complicaciones en un programa más complejo.

Ahora podemos buscar el archivo primos.txt y abrirlo con el bloc de notas o cualquier otro editor de texto:

El código del programa es el siguiente:

def esprimo(n):
    if n==2:
        return True
    i = 2
    while i<=n/2:
        if n%i == 0:
            return False
        i = i+1
    return True

def prog():
    arch=open("primos.txt","w")  #ABRIR EL ARCHIVO
    for i in range (2,100):
        if esprimo(i):
            print (i)
            arch.write(str(i)+"\n")  #ESCRIBIR EN EL ARCHIVO
    arch.close()  #CERRAR EL ARCHIVO
prog()

En la próxima sección veremos cómo podemos leer los datos desde un archivo, que haya sido creado previamente con el python o con cualquier otro programa.



No hay comentarios:

Publicar un comentario