Introducción
por: The Inspector
Python es un lenguaje de
scripts muy popular en la actualidad, así que decidí crear mi
propia entrada sobre este tema en particular, ya que en varias
entradas que he leído, siempre me ha parecido que les queda faltando
algo, yo intentaré cubrir un poco mas el tema y espero que cuando
termine, me quede faltando menos de lo que les falto a las entradas
que leí.
El tema de los archivos
se hace importante cuando comienzas a escribir scripts funcionales
mas allá de pruebas básicas de uno u otro algoritmo, justo en el
momento en que dices “¿Cómo hiciera para conservar esta
información?”.
Python cuenta con varias
formas de manejar archivos, yo me centraré en el módulo io,
este módulo en cuestión, posee un grupo de funciones para manejar
archivos, y me he centrado en este modulo porque las funciones que
contiene, devuelven valores que para comenzar es importante siempre
tener en cuenta.
En primer lugar la
función io.open(nombre_de_archivo, modo) permite hacer
la apertura de un archivo cuya ruta puede ser relativa al directorio
actual o absoluta; en uno de varios modos que pueden ser para
lectura, escritura, agregado o combinaciones de estos.
Nota:
El módulo os permite conocer el directorio de trabajo
actual por medio de la función os.getcwd() y
establecer el directorio actual por medio de la función
os.chcwd(ruta); se
debe tener en cuenta que la barra invertida (
\
)
en Windows es un caracter de escape, así que para que la ruta sea
valida se deben utilizar dos barras invertidas y que la ruta debe ser
una cadena entre comillas, ejemplo ('d:\\Escritorio').
Respecto a los modos de
apertura pueden ser:
Modo
|
Descripción
|
r
|
apertura para solo lectura (modo por defecto)
|
a
|
apertura para agregar al final de archivo
|
w
|
apertura para solo escritura
|
Es posible combinar los
modos de apertura anteriores con los detallados a continuación para
extender su funcionalidad:
Modo
|
Descripción
|
t
|
indica que la información será tratada como
datos texto (modo por defecto)
|
b
|
Indica que los datos del archivo serán tratados
como binarios.
|
+
|
indica que el archivo se abre para
lecto/escritura
|
Es importante el buen
manejo de estos modos de apertura, para no estar dando vueltas
abriendo y cerrando el archivo cuando no es necesario.
Una
vez se tiene abierto el archivo podemos proceder a su manejo para
ello, podemos utilizar diferentes funciones dependiendo del tipo de
trabajo que vayamos a realizar con el.
Función
|
Descripción
|
read([n])
|
Esta función permite
leer del contenido del archivo, el parámetro entre corchetes es
opcional y permite especificar la cantidad de bytes que queremos
leer del archivo desde la ubicación actual del puntero; en caso
de no suministrar el parámetro la función leerá desde la
ubicación actual del puntero hasta el final del archivo.
|
write(b)
|
Esta función permite
escribir en el archivo en la ubicación actual del puntero el
valor que se le pase como parámetro.
|
tell()
|
Esta función permite
conocer la ubicación actual del puntero dentro del archivo.
|
seek(p,[d])
|
Esta
función permite ubicar el puntero en el archivo, el parámetro p
un entero positivo o negativo que indica la posición que queremos
darle al puntero, el parámetro d puede ser 0, 1 o 2 es opcional y
permite especificar desde donde nos desplazaremos
0
→ indica que el desplazamiento es relativo al inicio del
archivo(valor por defecto)
1
→ indica que el desplazamiento es relativo a la ubicación
actual del puntero
2 → indica que el
desplazamiento es relativo al final del archivo.
|
readable()
|
Devuelve true si el
archivo permite su lectura con el método read()
|
seekable()
|
Devuelve true si el
archivo permite movilizar el puntero con el metodo seek()
|
writable()
|
Devuelve true si el
archivo permite escritura en el.
|
Es
necesario tener en cuenta que las operaciones de lectura o escritura
modifican la ubicación actual del puntero.
Una
diferencia notable entre importar o no el módulo io, radica en que
las funciones seek(), write() devuelven, la primera un valor que
indica la ubicación actual del puntero después de utilizarla y la
segunda un valor que indica cuantos bytes fueron escritos en el
archivo. Así como también el módulo io cuenta con las
funciones readable(), seekable(), writable().
Ejemplos
Como primera medida se
importa el módulo io
import io
Para abrir un archivo
donde solo queremos leer el contenido, asignar el contenido a una
variable llamada datos para procesar la información y cerrar el
archivo sería:
archivo =
io.open('ruta_del_archivo', 'r')
datos = archivo.read()
archivo.close()
Para abrir un archivo
donde solo queremos leer parte del contenido, asignar el contenido a
una variable para procesar la información y cerrar el archivo sería:
leer = 5 //cantidad de
bytes que queremos leer
archivo =
io.open('ruta_del_archivo', 'r')
datos =
archivo.read(leer)
archivo.close()
Lo anterior leería los
primeros 5 bytes y dejaría el puntero a 5 bytes del inicio del
archivo.
Si lo que queremos es
leer parte del archivo que no se encuentra en el inicio debemos
primero ubicarnos en el byte donde queremos empezar a leer.
leer = 2 //cantidad de
bytes que queremos leer
ubic = 20 //ubicación
donde queremos leer los 2 bytes
archivo =
io.open('ruta_del_archivo', 'r')
archivo.seek(20)
datos =
archivo.read(leer)
archivo.close()
Para escribir en un
archivo modificamos el modo de apertura por 'w' teniendo en cuenta
que este modo creará un archivo si no existe o sobrescribirá el
archivo si ya existe.
escribir = 'texto a
escribir' //cantidad de bytes que queremos leer
archivo =
io.open('ruta_del_archivo', 'w')
archivo.write(escribir)
archivo.close()
Para tanto escribir como
para leer un archivo sin necesidad de estar abriendo y cerrando para
cambiar de modos se puede usar combinaciones de modos como la
siguiente donde se leen los primeros 5 bytes del archivo, luego se
retorna al inicio del archivo para escribir algo de contenido.
leer = 5 //cantidad de
bytes que queremos leer
escribir = 'texto para
escribir '
archivo =
io.open('ruta_del_archivo', 'rw')
datos =
archivo.read(leer)
archivo.seek(0)
archivo.write(escribir)
archivo.close()
En los ejemplos
anteriores se han utilizado archivos de texto, sin embargo, funciona
exactamente igual para los archivos binarios donde la única
diferencia consiste en el modo de apertura:
leer = 5 //cantidad de
bytes que queremos leer
escribir =
'\x68\x6F\x6C\x61'
archivo =
io.open('ruta_del_archivo', 'r+b')
datos =
archivo.read(leer)
archivo.seek(0)
archivo.write(escribir)
archivo.close()
No hay comentarios.:
Publicar un comentario