Archivos en Python – Métodos del objeto file y modos de apertura

En esta entrada me gustaría que comenzaremos a aprender archivos en python, vamos a ver como crear y editar archivos desde nuestro código de manera segura usando también try /except para que en caso de obtener errores podamos manejarlos como se debe. Venga manos a la obra!

Archivos en Python 3 : Crear; leer; abrir; ejecutar

 

Icono de archivos en python

 

Para crear un archivo en python desde nuestro código encontraras diferentes maneras pero yo recomiendo utilizar la que aquí voy a explicar debido a que es más segura y óptima a la hora de modificar ficheros.

 

Crear archivo de texto en python usando With

Esta cláusula establece automáticamente un contexto para la ejecución segura debido a que crea un punto de partida de configuraciones iniciales y al finalizar recupera los valores anteriores. Y en el caso de la apertura de un archivo este automáticamente ha de cerrarlo una vez terminada la función que lo involucre, así como también se realiza una limpieza de la memoria utilizada.

Por esto creo que la forma correcta de manipular archivos es utilizando la cláusula with aunque veo muchos tutoriales y cursos donde se enseña a abrir y crear ficheros solo utilizando el método open (lo que no está mal pero tampoco es lo mas optimo)

De esta manera se utiliza un gestor de contexto «Context Manager» que son objetos que tienen definido los métodos __enter__ y __exit__  para inicializar el contexto y para terminarlo al igual que los objetos file, esto nos asegura que se ha de cerrar correctamente.

 

Abrir archivos en python mediante el objeto file

Podemos manipular una variable como un objeto file (archivo) asignándole un archivo mediante la función integrada open e indicando la ruta del mismo seguido del modo en el cual vamos a abrirlo. Entonces la variable toma como valor el archivo y se convierte en un objeto file permitiéndonos trabajar con ella utilizando los métodos.

Entiendes Mendez?

Combinándolo con la cláusula with as lo hacemos de la siguiente manera:

 

Te recomiendo acostumbrarte a hacerlo utilizando la cláusula with as aunque su sintaxis es un poco más difícil de recordar a mi forma de verla es mucho más segura y estable. Venga veamos y repasemos la sintaxis:

 

 

Bueno si ya has comprendido la sintaxis ponla en práctica.. Intenta crear un archivo «.py» que sea capaz de parir un «txt» (nose porque utilizo estos términos supongo que para generar polémica) Y sino míralo en funcionamiento en mis clásicos gifs:

Dando a luz un .txt (imagen gif)

Creando un Archivo en Python


Métodos del objeto file en python

Anteriormente habíamos visto que son los métodos, los que se podría traducir como órdenes que le podemos dar a los objetos. Hace poco había visto un ejemplo en un sitio que decía que un objeto podría ser nuestro perro y un método las órdenes que le dictamos las cuales le hemos enseñado con anterioridad (sentarse, rodar, dar la pata).

Veamos nuevamente la definición que dimos anteriormente sobre los métodos:

Un método puede ser una serie de sentencias para llevar a cabo una acción, pero en este caso podemos ver al método como el pedido a un objeto para que realice una tarea o en este caso un cambio!

Comprender los métodos del objeto file nos van a permitir manipular archivos en python, (crearlos, abrirlos, guardarlos o solo leerlos)

Es importante saber que cuando lo abrimos existe un puntero, que es donde se posiciona el intérprete sobre el archivo, normalmente lo hace al inicio, pero si quisiéramos abrirlo con el puntero en determinada ubicación podríamos hacerlo con los métodos de los que dispone el objeto file:

Método Seek(byte)

Este método se corresponde al puntero que te mencionaba y junto al método tell() nos permitirá ubicarnos al final o al principio de los archivos. Pero el método seek() fue diseñado para archivos binarios, no para archivos de texto.

Este método moverá el puntero hacia el byte indicado como argumento.

seek (desplazamiento, desde_donde)

Si colocamos un cero ‘0’ como argumento a seek nos posiciona al inicio del archivo!

Método Tell()

El método tell() devuelve el puntero a una posición en un momento dado. Junto con seek() nos permitirán posicionarnos al principio o al final.

Tell() nos devuelve un entero que indica la posición del puntero.

 

Método Read([bytes])

El método read nos permite leer un archivo completo, salvo que indiquemos los bytes entonces solo leerá hasta los bytes determinados. Vamos a ver como utilizarlo abriendo un archivo .txt que tengo por aquí guardado perteneciente a la letra de una canción:

Resultado:

Abrir archivos en python método read

 

Presta atención a la letra «r» que colocamos como modo luego del nombre, esto significa que lo abre  solo para ser leído. Por ende no puede ser editado.

Y cuidado con esto porque si colocas una «w» de «Write» lo abrirás en modo escribir en el. Y se borrara todo el contenido. Esto lo veremos más abajo en los Modos de apertura.

 

Método Readline([bytes])

El método readline lee una línea por vez. Si colocamos un solo readline nos leerá una sola línea y si no especificamos a partir de donde sera la primera por defecto. Veamos el código!

Resultado:

Método readline()

Cada vez que hagamos un readline() tomará la siguiente línea.

Imprimir o leer sólo líneas específicas de un archivo en python

Algo adicional para la comprensión avanzada en caso de querer imprimir líneas en específico como por ejemplo el estribillo :

En caso de querer imprimir una linea especifica no podemos hacerlo con readline() correctamente. Aun posicionando el puntero con el método seek() porque el mismo fue creado con la idea de posicionar en archivos binarios, y en cambio los de texto se manejan linea a linea, por lo que sería un bodrio calcular donde específicamente establecer el puntero si no es al principio o al final.

Suponiendo que quisiéramos imprimir a partir de la línea 34 a la 38 inclusive correspondiente al estribillo deberíamos hacerlo iterando el archivo de texto con la función predefinida enumerate e imprimir solo las lineas que nos interesan. Voy a dejar el código pero si estas aprendiendo python aun es obvio que no lo comprendas, pero se me ocurre que le puede ser útil a alguien dado que no se encuentran casi formas de iterar correctamente un archivo de texto linea a linea:

Es la única manera que encontré de realizar lo antes mencionado, a esto se le denomina técnica de iteración utilizando la función enumerate(). Que veremos más adelante para no irnos por las ramas, pero joder que tenia que ponerlo porque me volví loco intentando imprimir una línea específica con readlines() y seek() y nunca lo logre.

Método Readlines()

Lee todas las líneas en forma de lista separando las líneas con el carácter de escape para los saltos de línea «/n»

Resultado:

Método readlines()

Método Write()

Sirve para escribir una cadena dentro del mismo. Para esto debemos abrirlo con modo de re-escribir lo cual se hace agregando «r+» en el modo de apertura. De esta manera nuestra cadena se añadirá al final.

Resultado:

Método Write()

El código (OPCIONAL) en sí es difícil de comprender a simple vista pero una vez que veas y entiendas todos los métodos te sera mas facil de entender. Pero en si lo que hace es almacenar mediante el método tell() el puntero al final y lo almacena en una variable entonces luego solo llamamos al método seek() con la variable como argumento para posicionarnos al final luego de agregar la nueva línea, y almacenamos en una variable la línea editada utilizando otro read() y para finalizar imprimimos el nuevo contenido. Pero es opcional solo para que nos quede más chulo.

Tú simplemente puedes hacerlo así:

Si no utilizas el f.read() la línea se añadirá al principio y no al final. También para agregarla al final puedes abrirlo como apertura «a» en vez de «r+» y sin incluir el .read(). Así:

 

Método Writelines(secuencia)

Nos permite escribir una secuencia (elemento iterable) dentro de el linea a linea por ejemplo: Una lista.

 

Resultado:

Método Writelines()

Sin incluir el código opcional de mostrar las líneas editadas:

 

 

Método Close()

El método close se encarga de cerrar el archivo de forma segura. Si pretendes modificar un archivo luego de utilizar el método close() se producirá un error, debido a que ya se cerró. Deberás abrirlo nuevamente.


Modos de apertura de archivos en python

El modo de apertura de nuestros archivos es importante debido a que determinan varios factores a tener en cuenta y permiten abrir archivos tanto para solo lectura como para edición, o reemplazo completo. Veamos cuales son y cual es su sintaxis a la hora de especificarlo.

Modo de Solo lectura (Read) («r»)

Para especificar que lo abrimos en modo de lectura lo hacemos añadiendo la letra «r» luego del nombre. Como lo especifica su nombre solo permite al intérprete trabajar con él en modo lectura por lo que lo cargará en memoria pero no podrá editarlo.

Modo de Escritura (Write) («w»)

Al abrir un archivo en este modo el mismo será borrado y vuelto a escribir, por eso es importante distinguir este modo como de truncado. Si el archivo no existe, lo creara. Pero hay que tener en cuenta el echo de que si el mismo existe sera reescrito, y eso si trabajamos con algún archivo importante es destacable.

Modo de Solo escritura al final («a»)

Este modo nos permite escribir en el archivo posicionandonos al final de el mismo. Si abrimos un archivo utilizando este modo siempre estaremos escribiendo a continuación de lo que ya se encuentra en el mismo sin necesidad de posicionar el puntero. También al igual que write si el archivo no existe sera creado.

Modo de Lectura- Escritura (+) (r+ , w+, a+)

Si a cualquiera de los anteriores le añadimos un «+» se convierte en modo de escritura y lectura. Pero ambos («r+») y («w+») trabajan de manera diferente. Al utilizar («w+») si el archivo existe será truncado, es decir, se borrara todo su contenido y se sobreescribirá en el. No es así el caso de («r+»). (a+) permanece igual, solo que al agregarle un + si el fichero no existe sera creado.

Recuerda que tanto «w» como «w+» van a truncar los archivos en caso de existir, por lo que si abres un file existente el mismo será sobrescrito y perderás su contenido.

Sintaxis de los modos de apertura:

 

 

 


Crear un programa para leer archivos desde Python

 

Paso 1: Utilizamos Try / Except para atrapar excepciones al abrirlo

Creando un programa en python para leer archivos

 

Podemos agregar una sentencia try / except para en caso de generarse una error a la hora de abrir un archivo, por ejemplo en el caso que nos hayamos equivocado de ubicación. Veamos como aplicarlo en este caso de querer abrir un archivo para leerlo:

 

En este caso he eliminado el archivo de texto piratas.txt y por ende nos produce este error (obviamente porque lo estamos intentando abrir en modo «r+» porque si lo intentáramos colocando el modo write («w+») el archivo se crearía y no nos daría ningún error):

Error al abrir archivo en la ubicación

Traceback (most recent call last):
File «archivo.py», line 8, in <module>
with open («pirata.txt», «r+») as f: #Abrimos a modo Reescribir (r+)
FileNotFoundError: [Errno 2] No such file or directory: ‘pirata.txt’

 

Como podemos interpretar en el error nos esta diciendo que el archivo no existe. Así que podemos hacer dos cosas, crear un try / except donde se le advierta al usuario, y también podemos pedirle al usuario que ingrese la ubicación donde debería estar el archivo, que en este caso lo coloque dentro de la carpeta test. ¿Que te parece si lo intentamos? ya tenemos los conocimientos necesarios, venga!

 

Paso 2: Le preguntamos al usuario donde se encuentra:

 

Para hacer esto es obvio que deberíamos declarar una variable que almacene la ruta por defecto : /piratas.txt y en caso de error que le solicite al usuario ingresar un nuevo dato en esa variable, podemos hacerlo así:

 

Bien hasta aquí creamos un bucle infinito utilizando while true y ademas añadimos un try/except en caso de que ocurra un error, que sabemos que va a ocurrir porque la ruta que estamos dándole al interprete no es la correcta!!

Pero si probamos agregar el archivo pirata.txt a donde se encuentra el .py si lo abre, por ende el código esta funcionando bien y es correcto.

 

Paso 3: Forzamos a dar la ubicación en un input

 

Ahora vamos a colocar una variable como nombre de archivo, a la cual llamaremos dirarchivo y seguidamente vamos a colocar en el except un input para que el usuario se vea forzado a dar la ubicación de dicho archivo quedando nuestro código así:

Resultado en Gif:

Programa que abre archivos según ubicación

Espero que te haya encantado como a mi lo bien que funciona!! ^^

 

A tener en cuenta a la hora de utilizar archivos

Aprender a trabajar correctamente los archivos nos abre muchas posibilidades, no solo el hecho de crear un texto a mi forma de verlo podemos manipular archivos del sistema y programas modificando configuraciones. También podemos crear un código que nos cree y edite otros «.py». O nos permite reescribir archivos masivamente. Suponiendo que tengas muchos archivos  y quieras agregarle algún copyright o marca personal. Puede permitirte también crear un txt lleno de contraseñas, emails, información útil. Que tu imaginación no te detenga sólo en los cutres .txt y en lo llano sobre lo que aprendes, intenta experimentar con el código.

Adiooos!Esto es todo mi querido lector, me despido cordialmente esperando que te halla gustado esta entrada y por sobre todo te haya ayudado a comprender este maravilloso lenguaje! Un cordial abrazo y nos vemos en la siguiente entrada!! Gracias por visitar mi blog!

 

 

 

 

Ayúdame a llegar a mas personas!
  • 3
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  • 3
  •  
  •  
  •  
  •  
  •  
  •