Anda di halaman 1dari 6

PERSISTENCIA DE LA INFORMACIN

Persistencia
Cuando se almacena en la memoria principal, luego de desconectar la energa elctrica, la
informacin se pierde.
Se dice que un programa es persistente si corren por un largo periodo de tiempo y almacenan
sus datos en medios de almacenamiento permanente. Si la computadora se reinicia o apaga, el
programa puede cargar sus datos.
Ejemplos de programas persistentes: un SO, Servidores Web
Una de las maneras ms simples de mantener sus datos es a travs de archivos de texto. Una
alternativa es usar Bases de Datos

Lectura y escritura
Un archivo de texto es una secuencia de caracteres almacenados en un medio permanente

LECTURA
archivo = open("datos.txt")
#linea = archivo.readline()
for linea in archivo:
print linea.strip()

ESCRITURA
archivo = open("salida.txt", "w")
print archivo
linea = "Esta es la primera linea \n"
linea2 = "Esta es la segunda linea \n"
archivo.write(linea)
archivo.write(linea2)
archivo.close()

EL OPERADOR FORMATO
El argumento de la funcin write debe ser un string. Si se desea escribir otros valores al
archivo, deben ser convertidos a string. Se puede usar la funcin str()
Una alternativa es usar el operador formato %. Cuando se aplica a enteros, % es el mdulo.
Pero cuando el primer operando es un string, % es el operador formato

numero = 42.5
print '%.2f' % numero
print '%10.2f' % numero
print '%d' % numero
print '%04d' % numero

#salida
42.50

42.50

42

0042

Si existen ms secuencias a ser formateadas, se debe usar una tupla


print 'En %d anios, la tasa es de %g %s.' % (3, 0.1, 'porciento')
#Salida
En 3 anios, la tasa es de 0.1 porciento.

NOMBRES DE ARCHIVOS Y PATHS


Los archivos se organizan en directorios y subdirectorios. Todo programa en ejecucin tiene
un directorio actual.
Existen 2 tipos de paths: relativos y absolutos
import os
cwd = os.getcwd()
print cwd # /home/andres/workspace/Primero/paquete1
# C:\Users\Andres\workspace\primeroPython\fuentes\primero

import os
print os.path.abspath('datos.txt') #
/home/andres/workspace/Primero/paquete1/datos.txt
C:\Users\Andres\workspace\primeroPython\fuentes\primero\datos.txt

VERIFICAR LA EXISTENCIA DE UN ARCHIVO


import os
if os.path.exists('c:\setup.log'): print "Existe"
else: print "No existe"

LISTAR CONTENIDOS DE DIRECTORIOS


import os
print os.listdir(".") # directorio actual
print os.listdir("..") # directorio padre
archivos = os.listdir("c:/") # otro directorio
for archivo in archivos:
print archivo

RECORRER UN DIRECTORIO
def walk(dir):
for name in os.listdir(dir):
path = os.path.join(dir, name)
if os.path.isfile(path):
print path
else:
walk(path)

walk("D:/Andres/libros")

EJERCICIO:
Revisar la funcin os.walk()

Manejo de excepciones
si se intenta abrir un archivo que on existe, se obtendr un error del tipo IOError:
>>> fin = open('bad_file')

IOError: [Errno 2] No such file or directory: 'bad_file'

Si no se tiene permiso para acceder al archivo:


>> fout = open('/etc/passwd', 'w')

IOError: [Errno 13] Permission denied: '/etc/passwd'

Para evitar estos errores se pueden usar funciones como os.path.exists y os.path.isfile

Es mejor esperar el mal funcionamiento a travs de la estructura try/exept:


try:
fin = open('archivo')
for line in fin:
print line
fin.close()
except:
print 'Error al abrir el archivo'

#salida

Error al abrir el archivo

Python comienza ejecutando la clausula Try. Si todo va bien, se salta la clausula Except. Si se
da una excepcin (error de ejecucin), salta inmediatamente a la clusula except
El proceso de capturar excepciones se denomina catching. En general, cuando se captura una
excepcin se debe: arreglar el problema, intentarlo nuevamente o terminar el programa
Bases de Datos
Una Base de Datos es un archivo que est organizado para almacenar datos. La mayora de
bases de datos estn organizadas como un diccionario (clave:valor). La diferencia es que la BD
est en disco.
El mdulo anydbm provee una interfaz para crear y actualizar archivos de base de datos.

EJEMPLO:
import anydbm

db = anydbm.open('captions.db', 'c') #c indica que debe ser creada


#desde 0
db['cleese.png'] = 'Photo of John Cleese.'
print db['cleese.png']
db['cleese.png'] = 'Photo of John Cleese doing a silly walk.'
print db['cleese.png']
db.close()

RECORRER LA BD:
import anydbm

db = anydbm.open('captions.db', 'c')
for key in db:
print key

db.close()

#Salida:

cleese.png
cleese2.png
cleese3.png

PARA CERRAR LA BD SE DEBE EJECUTAR


db.close()

Pickling
La limitacin con la BD es que las claves y valores deben ser strings. El mdulo pickle puede
ayudar. Traduce todo tipo de objetos en strings y lo traduce de vuelta como strings.
Ejemplo:
import pickle
t=[1,2,3]
print pickle.dumps(t)
Out[14]: '(lp0\nI1\naI2\naI3\na.'
PARA CARGAR UN STRING:
import pickle

t1 = [1, 2, 3]
s = pickle.dumps(t1)
t2 = pickle.loads(s)
print t2

#Salida

[1, 2, 3]

EJEMPLO DEL USO DEL MDULO CON LA BD


import pickle
import anydbm

t1 = [1, 2, 3]
db = anydbm.open('alumnos.db', 'c') #c indica que debe ser creada

db['Juan'] = pickle.dumps({'apellido' : 'Perez', 'promedios' : t1})


db['Juan2'] = pickle.dumps({'apellido' : 'Perez2', 'promedios' : t1})
db['Juan3'] = pickle.dumps({'apellido' : 'Perez3', 'promedios' : t1})

db.close()

PROBANDO LAS SALIDAS


import anydbm

db = anydbm.open('alumnos.db', 'c')
print pickle.loads(db['Juan'])['apellido']
print pickle.loads(db['Juan'])['promedios']
db.close()

#Salida

Perez
[1, 2, 3]

Shelve
import shelve

personas = shelve.open('personas.db')

personas['010355'] = {'nombre' : 'Juan Perez1', 'edad' : 21, 'notas' : [12,


15, 16]}
personas['010356'] = {'nombre' : 'Juan Perez2', 'edad' : 22, 'notas' : [12,
15, 16]}
personas['010357'] = {'nombre' : 'Juan Perez3', 'edad' : 23, 'notas' : [12,
15, 16]}
personas['010358'] = {'nombre' : 'Juan Perez4', 'edad' : 24, 'notas' : [12,
15, 16]}

personas.close()

personas = shelve.open('personas.db')
print personas['010357']
print personas['010357']['nombre']
print personas['010357']['edad']
print personas['010357']['notas']
print personas['010357']['notas'][2]