Programación

“Primero resuelve el problema. Entonces, escribe el código.” — John Johnson

lunes, 13 de noviembre de 2017

Archivo

1. Sobre el objeto File
Al igual que sucede con otras variables, manipular una de ellas como un objeto File, es posible, cuando a ésta, se le asigna como valor un archivo.
Para asignar a una variable un valor de tipo file, solo es necesario recurrir a la función integrada open(), la cual está destinada a la apertura de un archivo.
La función integrada open(), recibe dos parámetros:
El primero de ellos, es la ruta hacia el archivo que se desea abrir
Y el segundo, el modo en el cual abrirlo
1.1. Modos de Apertura
El modo de apertura de un archivo, está relacionado con el objetivo final que responde a la pregunta ¿para qué estamos abriendo este archivo?. Las respuestas a esta pregunta pueden ser varias. Por ejemplo, podemos querer abrir un archivo para leerlo, para escribirlo, para leerlo y escribirlo, para crearlo si no existe y luego escribir en él, etc.
Es necesario saber, que cada vez que abrimos un archivo estamos creando un puntero, el cuál se posicionará dentro del archivo en un lugar determinado (al comienzo o al final) y este puntero podrá moverse dentro de ese archivo, eligiendo su nueva posición, mediante el número de bytecorrespondiente.
Este puntero, se creará -en inicio- dependiendo del modo de apertura indicado, el cuál será indicado a la función open() como una string en su segundo parámetro. Entre los *modos de apertura posibles, podemos encontrar los siguientes:




Indicador Modo de apertura Ubicación del puntero
r Solo lectura Al inicio del archivo
rb Solo lectura en modo binario Al inicio del archivo
r+ Lectura y escritura Al inicio del archivo
rb+ Lectura y escritura en modo binario Al inicio del archivo
w Solo escritura. Sobreescribe el archivo si existe. Crea el archivo si no existe Al inicio del archivo
wb Solo escritura en modo binario. Sobreescribe el archivo si existe. Crea el archivo si no existe Al inicio del archivo
w+ Escritura y lectura. Sobreescribe el archivo si existe. Crea el archivo si no existe Al inicio del archivo
wb+ Escritura y lectura en modo binario. Sobreescribe el archivo si existe. Crea el archivo si no existe Al inicio del archivo
a Añadido (agregar contenido). Crea el archivo si éste no existe Si el archivo existe, al final de éste. Si el archivo no existe, al comienzo
ab Añadido en modo binario (agregar contenido). Crea el archivo si éste no existe Si el archivo existe, al final de éste. Si el archivo no existe, al comienzo
a+ Añadido (agregar contenido) y lectura. Crea el archivo si éste no existe. Si el archivo existe, al final de éste. Si el archivo no existe, al comienzo
ab+ Añadido (agregar contenido) y lectura en modo binario. Crea el archivo si éste no existe Si el archivo existe, al final de éste. Si el archivo no existe, al comienzo

2. Métodos del Objeto File
El objeto File, entre sus métodos más frecuentes, dispone de los siguientes:
Método: seek(byte) Mueve el puntero hacia el byte indicado.
archivo = open("prueba.txt", "r")
contenido = archivo.read()
# el puntero queda
# al final del documento
archivo.seek(0)

Método: read([bytes]) Lee todo el contenido de un archivo. Si se le pasa la longitud de bytes, leerá solo el contenido hasta la longitud indicada.
archivo = open("prueba.txt", "r")
contenido = archivo.read()
print (contenido)

Método: readline([bytes]) Lee una línea del archivo.
archivo = open("prueba.txt", "r")
linea1 = archivo.readline()
print (linea1)

Método: readlines() Lee todas las líneas de un archivo.
archivo = open("prueba.txt", "r")
for linea in archivo.readlines():
    print (línea)

Método: tell() Retorna la posición actual del puntero.
archivo = open("prueba.txt", "r")
linea1 = archivo.readline()
mas = archivo.read(archivo.tell() * 2)

if archivo.tell() > 50:
    archivo.seek(50)

Método: write(cadena) Escribe cadena dentro del archivo.
archivo = open("prueba.txt", "r+")
contenido = archivo.read()
final_de_archivo = archivo.tell()

archivo.write('Nueva linea')
archivo.seek(final_de_archivo)
nuevo_contenido = archivo.read()

print (nuevo_contenido)
# Nueva linea
Método: writelines(secuencia) Secuencia será cualquier iterable cuyos elementos serán escritos uno por línea.
archivo = open("prueba.txt", "r+")
contenido = archivo.read()
final_de_archivo = archivo.tell()
lista = ['Línea 1\n', 'Línea 2']

archivo.writelines(lista)
archivo.seek(final_de_archivo)

print (archivo.readline())
# Línea 1

print (archivo.readline())
# Línea 2

Método: close() Cierra un archivo.
archivo = open("prueba.txt", "r")
contenido = archivo.read()
archivo.close()
print (contenido)
3. Propiedades del objeto file
Se pueden acceder a las siguientes propiedades del objeto file:
closed: retorna True si el archivo se ha cerrado. De lo contrario, False.
mode: retorna el modo de apertura.
name: retorna el nombre del archivo
encoding: retorna la codificación de caracteres de un archivo de texto
>>> archivo = open("prueba.txt", "r+")
>>> contenido = archivo.read()
>>> nombre = archivo.name
>>> modo = archivo.mode
>>> encoding = archivo.encoding
>>> archivo.close()

>>> if archivo.closed:
...     print ("El archivo se ha cerrado correctamente" )
... else:
...     print ("El archivo permanece abierto" )
...
El archivo se ha cerrado correctamente

>>> nombre
'prueba.txt'

>>> modo
'r+'

>>> encoding
None

4. Cerrando archivos de forma automática
Desde la versión 2.5, Python incorpora una manera elegante de trabajar con archivos de forma tal, que se cierren de forma automática sin necesidad de invocar al método close(). Se trata de un bloque with:
with open("prueba.txt", "r") as archivo:
    contenido = archivo.read()

print (archivo.closed)
# True
Cuando una estructura with finaliza, Python, automáticamente invoca al método close(), como se puede ver en el valor de la propiedad closed.
Como también se deja ver en el ejemplo, la sentencia with utiliza un alias para el objeto file, lo que permite acceder al objeto file, justamente, por el alias indicado.

No hay comentarios:

Publicar un comentario