8 febbraio 2009

Serializzazione dei dati in Python

Python dispone nella sua libreria standard(già python e compreso di batterie)diversi moduli per memorizzare direttamente oggetti Python in un file, sto parlando di pickle, cpickle, ma anche del modulo shelve che hanno il compito di effettuare il pickling, o serializzare oggetti in un database accessibile tramite chiavi di tipo dizionario nel caso specifico di shelve.

Vediamo il comportamento di pickle:

>>> import pickle
>>> file_diz = {'hacker':1, 'geek':2, 'nerd':3, 'troll':4}
>>> pickle_data = open('file_diz.pkl', 'w')
>>> pickle.dump(file_diz, pickle_data)
>>> pickle_data.close()


Adesso apriamo il file creato con pickle.
>>> pickle_data = open('file_diz.pkl', 'r')
>>> new_pickle_data = pickle.load(pickle_data)
>>> new_pickle_data
{'hacker': 1, 'geek': 2, 'troll': 4, 'nerd': 3}

Vediamo un' altro esempio:

>>> import pickle
>>> diz = {'python':['bello','elegante','divertente'],
...        'java': ['rindondande','noioso','lento'],
...        'ruby': ['copione','sopravvalutato','buono sul web']}
>>> file_diz = open('lista','w')
>>> pickle.dump(diz, file_diz)

Adesso apriamo il file in lettura:
>>> file_diz = open('lista', 'r')
>>> diz = pickle.load(file_diz)
>>> diz
{'python': ['bello', 'elegante', 'divertente'], 'java': ['rindondande', 'noioso', 'lento'], 'ruby': ['copione', 'sopravvalutato', 'buono sul web']}


adesso vediamo shelve al lavoro:

>>> import shelve
>>> databas = shelve.open("mioDB") # creo il database
>>> databas['Top star'] = ['Iron Maiden']
>>> databas['Genere'] = ['Metal'] 
>>> databas  # chiamo il database
{'Genere': ['Metal'], 'Top star': ['Iron Maiden']}
>>> databas.has_key('Top star') # chiamata tramite la prima chiave
1
>>> del databas['Top star'] # elimino la prima chiave cioè Top star
>>> databas
{'Genere': ['Metal']}
>>> databas.keys() # ecco la chiave rimanente nel database
['Genere']
>>> databas.close()# chiudo il database

Indubbiamente sia pickle, che shelve, sono degli ottimi modi per creare dei semplici file di database persistenti, ma non sono i soli, ci sono altri moduli, che definiscono dei dizionari su disco, tra questi ci sono dbm, gdbm, e anydbm.

Nessun commento: