
La serializzazione in Python
In questo tutorial ti parlo della serializzazione nel linguaggio Python. E' un concetto apparentemente complesso, ma con qualche esempio pratico diventa molto più chiaro.
Cos'è la serializzazione? E' una tecnica che ti permette di salvare un oggetto o dei dati per poterli riutilizzare in un'altra sessione o in un'altra esecuzione del programma. Immaginala come un modo di "congelare" e "scongelare" oggetti, trasformandoli in un formato che può essere facilmente salvato e recuperato. Ad esempio, quando giochi a un videogioco, puoi salvare la situazione e ricaricarla in un secondo momento. Questo si ottiene grazie alla serializzazione dei dati.
Se vuoi mantenere lo stato di un oggetto dopo che il programma si è chiuso o se devi inviare l'oggetto attraverso una rete, la serializzazione è la soluzione.
Serializzazione (Ppickling)
In Python, il processo di serializzazione è chiamato "pickling".
È come mettere qualcosa sotto aceto per conservarlo. Utilizzi il modulo pickle per "immettere" i tuoi oggetti in un barattolo virtuale, che può essere un file sul tuo computer.
Ecco un esempio pratico.
Per prima cosa devi caricare il modulo pickle in memoria.
import pickle
Ora crea un oggetto, ad esempio un dizionario con alcuni dati.
mio_dizionario = {"nome": "Mario", "età": 30}
A questo punto apri l'oggetto in un file tramite il metodo pickle con il parametro 'wb'.
Poi salvalo usando il metodo pickle.dump()
- # Salvataggio dei dati nel file
- with open('mio_dizionario.pkl', 'wb') as file:
pickle.dump(mio_dizionario, file)
I dati del dizionario sono salvati nel file "mio_dizionario.pkl" sul tuo PC nella cartella dove gira Python.
Una volta salvati, puoi ricaricarli in qualsiasi momento tramite un'operazione di deserializzazione.
De-serializzazione (Unpickling)
Quando hai bisogno di riutilizzare l'oggetto che hai serializzato, procedi al "unpickling". È come aprire il barattolo e ripristinare il suo contenuto al suo stato originale.
Ad esempio, apri il file "mio_dizionario.pkl" tramite il metodo pickle con il parametro 'rb'.
Poi caricalo in memoria usando il metodo pickle.load()
- # Caricamento dei dati dal file
- with open('mio_dizionario.pkl', 'rb') as file:
- mio_dizionario_caricato = pickle.load(file)
Infine, stampa il contenuto della variabile.
print(mio_dizionario_caricato)
Sullo schermo puoi vedere i dati che hai salvato.
In questo caso, è il dizionario originale
{'nome': 'Mario', 'età': 30}
Un piccolo avvertimento, fai attenzione quando usi dati serializzati provenienti da fonti non affidabili. Il processo di unpickling può eseguire codice potenzialmente pericoloso.
Il modulo Shelve
In alternativa, puoi serializzare un oggetto tramite il modulo Shelve.
Ad esempio, importa il modulo in memoria.
import shelve
Puoi scrivi dei dati serializzati usando il metodo shelve.open()
- # Creazione e salvataggio dei dati nello scaffale
- shelf = shelve.open('prova')
- shelf['nome'] = 'Mario'
- shelf['età'] = 30
- shelf.close()
Una volta salvati, puoi recuperarli usando sempre il metodo shelve.open()
Ad esempio, apri una nuova sessione in Python, in modo da cancellare la memoria, e ricarica i dati serializzati.
- # Apertura dello scaffale e lettura dei dati
- shelf = shelve.open('prova')
- print(shelf['nome'])
- # È buona pratica chiudere lo scaffale dopo l'uso
- shelf.close()
In questo caso Python recupera e visualizza sullo schermo il valore associato alla chiave "nome" del dizionario, ossia "Mario".
Mario
In questo modo puoi conservare i dati nel tempo e riutilizzarli in un secondo momento.
E' un'altra tecnica utile di serializzazione dei dati in Python.