Si te fijas en el escritorio de tu ordenador, ¿qué ves? Cientos de archivos que se extienden por todas partes, ¿verdad? Casi todo el mundo cae en este penoso hábito, nos resulta imposible, por un extraño vericueto del destino, el poner en orden los ficheros de nuestro equipo. Pero la clave de este artículo es saber cómo tratar todos esos archivos. Hoy vamos a hablar de Python, y de cómo trabajar con ficheros utilizando Python. Así que, si estás interesado, no te pierdas ni una coma de este tutorial.
Abrir un archivo
El proceso natural que tenemos para llevar a cabo con el fin de hacer cualquier operación con archivos es poder abrirlo. Antes que nada, descárgate el archivo Text.txt, que es el archivo que vamos a utilizar para llevar a cabo nuestros experimentos.
Con el fin de abrir el archivo utilizando Python, usaremos la función open(). Tal y como narra la documentación:
open() devuelve un objeto file, y comúnmente se utiliza con dos argumentos: open(nombre del archivo, modo)
Como has podido ver en el extracto de la documentación, la función open() cuenta con dos argumentos: el nombre del archivo y el modo. Estos argumentos se parecen a la función de stdio (es decir, de C) fopen(). El nombre del archivo hace referencia al nombre (y la ruta) del archivo que desees abrir. El modo es un valor string que indica cómo se va a abrir el archivo. Aquí puedes ver los distintos modos en los que se puede abrir un archivo:
- r: Abrir fichero para lectura. El puntero se posiciona al principio del fichero
- r+: Abrir fichero para lectura y escritura. El puntero se posiciona al principio del fichero
- w: Trunca a cero la longitud o crea un fichero de texto para escritura. El puntero se posiciona al principio del fichero
- w+: Abrir fichero para lectura y escritura. Si el fichero no existe, se crea, de lo contrario se trunca. El puntero se posiciona al principio del fichero
- a: Abrir fichero para lectura. Se creará el fichero si no exsite. El puntero se posiciona al final del fichero.
- a+: Abrir fichero para lectura y escritura. Se creará el fichero si no exsite. El puntero se posiciona al final del fichero.
Puedes ver más modos en la documentación de Python.
Vamos a continuar con el tutorial, y para eso necesitamos abrir el fichero Text.txt. Es tan simple como escribir lo siguiente:
text_file = open('Text.txt')
Como puedes ver, no hemos especificado el modo. Para saber el modo por defecto que utiliza open(), escribe print text_file, y obtendrás algo parecido a esto:
open file 'Text.txt', mode 'r' at 0x10728c810
Así, como indica el código, el modo por defecto es r. En este punto es posible que notes que no has avanzado nada, pero creeme que abrir el fichero ya es un gran paso.
Leyendo un fichero
Un fichero es como una caja sorpresa. La hemos abierto en el paso anterior y ahora queremos saber que tiene dentro. Leer un archivo en Python es muy sencillo, para se utiliza el método read() tal que así:
text_file.read()
Para ver la salida de la sentencia anterior, escribe print text_file.read(). Mediante esto, por fin el secreto (contenido) será revelado:
I'm enjoying learning about "file handling" in Python
Ahora vamos a probar una cosa. Escribe de nuevo la sentencia anterior, ¿Qué devuelve? En efecto, nada de nada. Esto es debido a que ya has leido el fichero completo, a diferencia de leerlo línea por línea, como por ejemplo con readline().
Escribiendo en un fichero
Tal vez quieras agregar una frase o un párrafo en el fichero una vez que lo has leído. Vamos a simular un caso, imagina que quieres añadir la siguiente frase: and I'm looking for more. Esto puede llevarse a cabo en Python utilizando el método write().
text_file.write('and I'm looking for more')
Ups, parece que hay un error...
Traceback (most recent call last): File "test.py", line 2, in text_file.write(' and I'm looking for more') IOError: File not open for writing
¿Has averiguado por qué? ¿Recuerdas cuando hemos abierto el archivo en la primera sección de la siguiente manera: open('Text.text');? Dado que no estamos especificando el modo, por defecto se establece en r. Esto nos permitirá únicamente leer el archivo, y en el ejemplo lo que queremos es escribir en él. Por lo tanto, vamos a abrir el fichero de nuevo, pero esta vez en modo w:
text_file = open('Text.txt', 'w')
Prueba ahora a escribir la sentencia otra vez utilizando el código de arriba. ¿Qué has obtenido? Vamos a abrir con open() y a leer read() el archivo tal y como te hemos mostrado en las dos primeras secciones de este tutorial, para ver lo que hay dentro del fichero:
text_file = open('Text.txt','r') print text_file.read()
La salida de este script es:
and I'm looking for more
¿Esperabas ver esta nueva frase acompañada por la frase original que hay dentro del fichero? Sí, ya sabes, esa que dice: “I'm enjoying learning about "file handling" in Python”, ¿verdad? El modo w sobreescribe el contenido del archivo en el que estás escribiendo. Si estás interesado en mantener el texto original del documento, utiliza el modo a.
text_file = open('Text.txt','a') text_file.write(' and I'm looking for more')
En este caso, sí que obtendrás lo esperado:
I'm enjoying learning about "file handling" in Python and I'm looking for more
Vamos a poner todo lo que hemos aprendido, junto:
with open('Text.txt', 'r+') as text_file: print 'The file content BEFORE writing content:' print text_file.read() text_file.write(' and I'm looking for more') print 'The file content AFTER writing content:' text_file.seek(0) print text_file.read()
Cerrando un fichero
Tener el hábito de cerrar un archivo después de leerlo o escribir en él te permitirá liberar memoria. Sí, Python cerrará automáticamente los archivos después de que finalice el script, pero si no lo haces previamente, los archivos abiertos ocuparán cierto espacio del que Python podría beneficiarse. Cerrar un archivo se lleva a cabo simplemente utilizando el método close().
text_file = open('Text.txt','a+') print text_file.read() text_file.write(' and I'm looking for more')
¿Que pasa si cerramos close() un archivo antes de leerlo read()? Pues lógicamente, Python mostrará un error:
Traceback (most recent call last): File "test.py", line 4, in module text_file.write(' and I'm looking for more') ValueError: I/O operation on closed file
Y con esto concluimos nuestro tutorial sobre escribir y leer ficheros en Python. Espero que te haya gustado y sepas aplicarlo en tus proyectos. ¡Feliz código!
Fuente: Abder-Rahman Ali