Tutorial 16, Ficheros en python.

Hola a tod@s de nuevo, aquí estoy otra vez para enseñaros un poquito mas sobre este gran lenguaje, python.

Hoy os voy a hablar sobre el tratamiento de archivos, por que, imaginaros que queréis hacer una calculadora que el resultado lo imprima en un archivo en vez de por pantalla, hasta ahora no sabríais hacerlo, pero si seguís leyendo detenidamente este post lo aprenderéis.



Tanto para leer archivos como para escribir en ellos, lo primero que hay que hacer, es abrir el archivo, esto es de sentido común, en python los archivos se abren con la función "open", a la cual se le pasa como primer argumento el nombre del archivo, y como segundo argumento el modo en el cual lo va a abrir.

Los modos en los que se puede abrir un archivo son los siguientes:

r--> Modo lecutra. El archivo se abre en modo lecutra, no se podrá escribir en él, solo leerlo, y el archivo debe de estar creado previamente, en caso de no existir, python nos tirará una excepción.

w--> Modo escritura. El archivo se abre en modo escritura, no se podrá leer el archivo, solo escribir en él. Si el archivo no existe, se creará, en caso de existir, sobreescribe el contenido.

 a--> Modo añadir. Abre el archivo en modo escritura, es exactamente igual que "w" pero en caso de existir el archivo, continúa escribiendo al final de este.

U--> Modo salto de linea universal. Permite el tratar ficheros con un formato de saltos de linea diferente a la plataforma en la que se esta trabajando, este modo no es muy usual.

Entonces, para abrir un archivo en modo lectura, tan sólo tenemos que hacer:

mi_archivo=open("a.txt", "r")

OJO: El archivo debe de estar en la misma carpeta que el programa, si no lo está se debe especificar la ruta, en caso de que python no lo encuentre nos tirará una excepción.

Lectura de ficheros:

Para leer los ficheros se usan los métodos: read, readline y readlines.

El método read, nos proporciona una cadena de texto, con todo el contenido del archivo, incluyendo saltos de linea, se le puede especificar un máximo de bytes a leer.

file=open("a.txt", "r")
cadena=file.read()
un_trozo=file.read(400)

El método readline, lee, desde donde esté el puntero hasta que encuentre un salto de linea.

file=open("a.txt", "r")
linea1=file.readline()
linea2=file.readline()
linea3=file.readline()

Y por último, el método readlines() devuelve una lista, con todas las líneas del archivo leído.

file=open("a.txt", "r")
lista=file.readlines()
print lista
#imprimiría ["linea1", "linea2", "linea3"]

Escritura de ficheros:
Para escribir dentro de un fichero se usan los métodos write y writelines, write, toma como primer argumento, una cadena de texto que escribirá en el archivo, y writelines, espera una lista con las lineas a escribir en el archivo, ejemplos:

#ejemplo de write

file=open("a.txt", "w")
file.write("esto se va a escribir dentro del archivo")
#para cerrar el archivo
file.close() 

#ejemplo de writelines

file=open("a.txt", "w")
lista=["linea1\n", "linea2\n", "linea3\n"]
file.readlines(lista)
#para cerrar el archivo 
file.close()

Mover el puntero de Lectura/Escritura:

Una cosa que no os he comentado, es el cursor, es decir, cuando nosotros, por ejemplo, leemos la primera linea de un archivo, hay como una especie de cursor que recorre esa linea y se situa al final de esta, ya sea para leer o para escribir, entonces... Si nosotros queremos situar ese cursor donde queramos, al principio, o al final...¿Cómo lo hacemos?, pues para eso existe un par de métodos llamados "seek" y "tell".

Seek se usa para mover el puntero donde nosotros queramos, mientras que tell() nos dice la distancia a la que se encuentra el cursor contando desde el principio del archivo.

Por ejemplo, si nosotros hacemos en un archivo de tres lineas:

file=open("a.txt", "r")
file.readline()

Leerá la primera linea y el cursor se situará al final de esta, para volver a ponerlo al principio del archivo, hacemos:

file.seek(0)

Y si queremos ponerlo al final de archivo:

file.seek(2)

Bueno chic@s, espero que os haya gustado el tutorial de hoy, mañana hablaremos sobre un interesante módulo llamado "re", un abrazo a tod@s y hasta el siguiente tutorial.
 

5 comentarios:

Dan dijo...

Justo lo que buscaba, gracias, Francisco.
Dan Rulos

Francisco Dominguez Lerma dijo...

De nada Daniel, gracias a ti por seguir mi blog, ya sabes que puedes preguntar todo lo que quieras en los comentarios.

Saludos.

Anónimo dijo...

Soy daniel de nuevo, he estado probando el código para leer archivos, pero luego no me los abre. Tengo la versión 3.2.3, así que me puedes pasar el códico, envíamelo al correo.
Dan Rulos

Francisco Dominguez Lerma dijo...

Mira Daniel, escribí un post en el cual describo las principales diferencias entre python 2.x y python 3.x, hechale un ojo, el código sería así:

mi_archivo=open("archivo.txt", "r")
print(mi_archivo.read())

Pero ojo, el archivo debe de estar en el mismo directorio que el programa ".py", si no lo esta, en vez de el archivo, deberías especificar también la ruta:

mi_archivo=open("carpeta1/carpeta2/archivo.txt", "r")
print((mi_archivo.read())

Debería de funcionar, un saludo.

Dan dijo...

gracias espero que funcione