Archivos y excepciones

Cuando un programa se está ejecutando, sus datos están en la memoria. Cuando un programa termina, o se apaga el computador, los datos de la memoria desaparecen. Para almacenar los datos de forma permanente debe usted ponerlos en un archivo. Normalmente los archivos se guardan en un disco duro, disquete o
CD-ROM.

Cuando hay un gran número de archivos, suelen estar organizados en directorios (también llamados “carpetas”). Cada archivo se identifica con un nombre único, o una combinación de nombre de archivo y nombre de directorio.

Leyendo y escribiendo archivos, los programas pueden intercambiar información entre ellos y generar formatos imprimibles como por ejemplo PDF.

Trabajar con archivos se parece mucho a trabajar con libros. Para usar un libro, tiene que abrirlo. Cuando ha terminado, tiene que cerrarlo. Mientras el libro está abierto, puede escribir en él o leer de él. En cualquier caso, sabe en qué lugar del libro se encuentra. Casi siempre lee el libro según su orden natural, pero también puede ir saltando de una página a otra.

Todo esto sirve también para los archivos. Para abrir un archivo, especifique su nombre e indique si quiere leer o escribir.

La apertura de un archivo crea un objeto archivo. En este ejemplo, la variable f abre el archivo llamado «test.dat«.

La función open toma dos argumentos. El primero es el nombre del archivo y
el segundo es el modo. El modo ’w’ (write) significa que lo estamos abriendo en modo escritura.

Si no hay un archivo llamado test.dat se creará. Si ya hay uno, el archivo que
estamos escribiendo lo reemplazará.

Al imprimir el objeto archivo (print(f)), vemos el nombre del archivo, el modo y la localización del objeto.

Para introducir datos en el archivo invocamos al método write sobre el objeto archivo:

El cierre del archivo le dice al sistema que hemos terminado de escribir y deja el archivo listo para leer:

Ya podemos abrir el archivo de nuevo, esta vez para lectura, y poner su contenido en una cadena. Esta vez el argumento de modo es ’r’ (read) para lectura:

Si intentamos abrir un archivo que no existe, recibimos un mensaje de error:

Como era de esperar, el método read lee datos del archivo. Sin argumentos, lee el archivo completo:

No hay un espacio entre “hora” y “de” porque no escribimos un espacio entre las cadenas.

El método read también puede aceptar un argumento que le indica cuántos caracteres tiene que leer:

Si no quedan suficientes caracteres en el archivo, read devuelve los que haya. Cuando llegamos al final del archivo, read devuelve una cadena vacı́a:

La siguiente función copia un archivo, leyendo y escribiendo los caracteres de
cincuenta en cincuenta. El primer argumento es el nombre del archivo original; el segundo es el nombre del archivo nuevo:

La sentencia break es nueva. Su ejecución interrumpe el bucle; el flujo de la ejecución pasa a la primera sentencia tras el bucle.

En este ejemplo, el bucle while es infinito porque el valor 1 siempre es verdadero. La única forma de salir del bucle es ejecutar break, lo que sucede cuando texto es una cadena vacı́a, lo que sucede cuando llegamos al final del archivo.