CodeGym /Corsi /Python SELF IT /Serializzazione

Serializzazione

Python SELF IT
Livello 22 , Lezione 0
Disponibile

8.1 Cos'è la serializzazione

Dopo aver imparato a lavorare con i file, salvare e leggere dati, è giunto il momento di imparare a lavorare con i file seriamente. Oggi iniziamo a esplorare la serializzazione.

Serializzazione — è il processo di conversione di un oggetto in una sequenza di byte o un formato che può essere salvato in un file, trasmesso in rete o memorizzato in un database. Deserializzazione — è il processo inverso, attraverso il quale da questa sequenza di byte si ripristina l'oggetto originale.

Per salvare un oggetto in un file (o trasmetterlo in rete), bisogna convertirlo in una stringa (o un insieme di byte), che sarà facile scrivere in un file (e leggere dal file) o trasmetterlo in rete.

Ecco 4 principali aree in cui si usa la serializzazione:

  • Salvataggio dello stato degli oggetti: Per salvare lo stato di un oggetto tra l'esecuzione di un programma.
  • Trasmissione dei dati: Per trasmettere oggetti in rete tra diversi componenti del sistema o tra differenti sistemi.
  • Caching: Per memorizzare oggetti nella cache per un accesso rapido.
  • Database: Per memorizzare strutture dati complesse nei database.

Esistono molte librerie che si occupano della serializzazione, ognuna creata per i propri scopi. Ne esploreremo cinque, ma con due ci sarà un'esplorazione molto dettagliata.

Consideriamo le più popolari tra esse:

  • Modulo pickle
  • Modulo json
  • Modulo yaml
  • Modulo marshal
  • Modulo shelve

Di seguito una breve panoramica di ciascuna:

8.2 Modulo pickle

pickle — è un modulo integrato per serializzazione e deserializzazione di oggetti Python. Permette di salvare e ripristinare quasi tutti gli oggetti Python, inclusi i classi utenti.

Esempio di utilizzo di pickle:


import pickle

# Esempio di oggetto per la serializzazione
data = {'name': 'Alice', 'age': 30, 'is_student': False}
            
# Serializzazione dell'oggetto in un file
with open('data.pkl', 'wb') as file:
    pickle.dump(data, file)
            
# Deserializzazione dell'oggetto da un file
with open('data.pkl', 'rb') as file:
    loaded_data = pickle.load(file)
            
print(loaded_data)

8.3 Modulo json

json — è un modulo integrato per lavorare con JSON (JavaScript Object Notation). JSON è un formato testuale utilizzato per lo scambio di dati tra client e server.

Esempio di utilizzo di json:


import json

# Esempio di oggetto per la serializzazione
data = {'name': 'Bob', 'age': 25, 'is_student': True}
            
# Serializzazione dell'oggetto in una stringa JSON
json_string = json.dumps(data)
print(json_string)
            
# Serializzazione dell'oggetto in un file JSON
with open('data.json', 'w') as file:
    json.dump(data, file)
            
# Deserializzazione dell'oggetto da una stringa JSON
loaded_data = json.loads(json_string)
print(loaded_data)
            
# Deserializzazione dell'oggetto da un file JSON
with open('data.json', 'r') as file:
    loaded_data = json.load(file)
print(loaded_data)

8.4 Modulo yaml

yaml (YAML Ain't Markup Language) — è un formato di serializzazione dei dati leggibile dall'uomo. Per lavorare con YAML in Python si utilizza la libreria esterna PyYAML.

Esempio di utilizzo di yaml:


import yaml

# Esempio di oggetto per la serializzazione
data = {'name': 'Carol', 'age': 27, 'is_student': False}
            
# Serializzazione dell'oggetto in una stringa YAML
yaml_string = yaml.dump(data)
print(yaml_string)
            
# Serializzazione dell'oggetto in un file YAML
with open('data.yaml', 'w') as file:
    yaml.dump(data, file)
            
# Deserializzazione dell'oggetto da una stringa YAML
loaded_data = yaml.load(yaml_string, Loader=yaml.FullLoader)
print(loaded_data)
            
# Deserializzazione dell'oggetto da un file YAML
with open('data.yaml', 'r') as file:
    loaded_data = yaml.load(file, Loader=yaml.FullLoader)
print(loaded_data)

8.5 Modulo marshal

marshal — è un modulo integrato per la serializzazione di oggetti Python, utilizzato per la serializzazione del codice Python. È più veloce di pickle, ma supporta meno tipi di oggetti ed è meno flessibile.

Esempio di utilizzo di marshal:


import marshal

# Esempio di oggetto per la serializzazione
data = {'name': 'Dave', 'age': 35, 'is_student': True}

# Serializzazione dell'oggetto in un file
with open('data.marshal', 'wb') as file:
    marshal.dump(data, file)
            
# Deserializzazione dell'oggetto da un file
with open('data.marshal', 'rb') as file:
    loaded_data = marshal.load(file)
            
print(loaded_data)

8.6 Modulo shelve

shelve — è un modulo integrato che fornisce una semplice possibilità di salvare oggetti Python in file con l'utilizzo di un archivio basato su chiavi, simile a un dizionario.

Esempio di utilizzo di shelve:


import shelve

# Esempio di oggetto per la serializzazione
data = {'name': 'Eve', 'age': 28, 'is_student': False}
            
# Serializzazione dell'oggetto in un file
with shelve.open('data.shelve') as db:
    db['person'] = data
            
# Deserializzazione dell'oggetto da un file
with shelve.open('data.shelve') as db:
    loaded_data = db['person']
            
print(loaded_data)

E anche se i moduli stessi e il formato di salvataggio dei dati sono differenti, il lavoro con loro dal punto di vista del programmatore è molto simile. Di seguito esamineremo più dettagliatamente il lavoro con modulo pickle e modulo json.

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION