Capítulo 11 Archivos y excepciones

Cuando un programa se esta 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 numero 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 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 esta abierto, puede escribir en el o leer de el. En cualquier caso, sabe en que lugar del libro se encuentra. Casi siempre lee el libro según su orden natural, pero también puede ir saltando de una pagina 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 apunta al nuevo objeto archivo.

   1: >>> f = open("test.dat","w")
   2: >>> print f
   3: <open file 'test.dat', mode 'w' at fe820>

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 para escribir.


Si no hay un archivo llamado test.dat se creara. Si ya hay uno, el archivo que estamos escribiendo lo reemplazara.


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


Para meter datos en el archivo invocamos al metodo write sobre el objeto archivo:




   1: >>> f.write("Ya es hora")
   2: >>> f.write("de cerrar el archivo")

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




   1: >>> f.close()

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:




   1: >>> f = open("test.dat","r")

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



   1: >>> f = open("test.cat","r")
   2: IOError: [Errno 2] No such file or directory: 'test.cat'

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



   1: >>> text = f.read()
   2: >>> print text
   3: Ya es horade cerrar el archivo

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


read también puede aceptar un argumento que le indica cuantos caracteres leer:




   1: >>> f = open("test.dat","r")
   2: >>> print f.read(7)
   3: Ya es h

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:




   1: >>> print f.read(1000006)
   2: orade cerrar el archivo
   3: >>> print f.read()
   4: >>>

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:




   1: def copiaArchivo(archViejo, archNuevo):
   2:     f1 = open(archViejo, "r")
   3:     f2 = open(archNuevo, "w")
   4:     while 1:
   5:         texto = f1.read(50)
   6:         if texto == "":
   7:             break
   8:         f2.write(texto)
   9:     f1.close()
  10:     f2.close()
  11:     return

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.

0