Come usare il modulo Shelve in Python

Come usare il modulo Shelve in Python
Questo articolo coprirà una guida sull'uso del modulo "Shelve" in Python. Il modulo Shelve può essere utilizzato per archiviare gli oggetti Python come coppie di valore chiave in un file esterno. Queste coppie di valore chiave sono serializzate nei flussi di byte, un formato che Python comprende. Quindi puoi salvare gli oggetti Python in un file e rimetterli in un programma leggendo il file in cui i dati serializzati sono stati archiviati in precedenza. Tutti i campioni di codice in questo articolo sono testati con Python versione 3.9.7 su Ubuntu 21.10.

Accandare e sottaceto

Il modulo Shelve utilizza il modulo "Pickle" di Python sotto per serializzare i dati. La differenza principale tra moduli Shelve e Pickle è che Shelve può essere utilizzato per associare gli oggetti serializzati ai tasti. Queste chiavi possono essere utilizzate come identificatori nel tuo codice e puoi fare riferimento a loro per ottenere l'oggetto serializzato. Il sottaceto d'altra parte non fornisce un modo nativo per archiviare i dati serializzati in coppie di valore chiave, senza alcune soluzioni alternative o codice personalizzato. Pertanto, lo scaffale è più un modulo di convenienza per una facile serializzazione degli oggetti Python e può essere utilizzato per creare semplici database contenenti dati serializzati.

Uso di base e sintassi

È possibile aprire un file di database utilizzando il metodo "Apri" disponibile nel modulo Shelve. Questo metodo può essere usato come gestore di contesto in modo che quel file sia correttamente chiuso al termine della chiamata del metodo. Ecco un esempio di codice:

Scaffio di importazione
con scaffale.Apri ('Test.db ', "w") come db:
db ['mele'] = 50
db ['arances'] = 80

La prima dichiarazione importa il modulo Shelve principale nel programma Python. Successivamente, usando "con scaffali.Apri "Call e contesto di contesto," Test.Il file db "è aperto come" db "in modalità di scrittura. Il file può avere qualsiasi nome ed estensione. Le ultime due dichiarazioni vengono utilizzate per creare due nuove coppie di valore chiave utilizzando la sintassi simile al dizionario di Python. Queste coppie di valore chiave vengono quindi memorizzate nel test.file db in forma serializzata.

Dopo aver eseguito il campione di codice sopra, se si apre il test.file db in un editor di testo, dovresti vedere alcuni dati simili a questo:

Come puoi vedere, i dati archiviati nel file non sono in forma leggibile dall'uomo. Tuttavia, se apri questo file usando Shelve, sarai in grado di recuperare coppie di valore chiave nel tuo programma Python. Ecco un esempio di codice:

Scaffio di importazione
con scaffale.Apri ('Test.db ') come db:
print (db ['mele'])
Stampa (db ['arance'])

Le coppie di valore chiave serializzate da Shelve sono identiche a un oggetto di tipo di dizionario in Python e supportano tutti i loro metodi. Quindi puoi fare riferimento agli oggetti fornendo una chiave in parenti quadrati. Nelle ultime due affermazioni, il valore di entrambe le chiavi viene recuperato utilizzando la sintassi simile al dizionario. Dopo aver eseguito il campione di codice sopra, è necessario ottenere il seguente output:

50
80

Si noti che Python sceglie automaticamente un formato di file di database appropriato per Shelve, prendendo in considerazione il sistema operativo da cui viene eseguito il programma. Tuttavia, non influisce sull'uso del modulo Shelve e sulla funzionalità degli oggetti serializzati usandolo.

Ottenere tutte le coppie di valore chiave da un file di database creati utilizzando Shelve

Per ottenere tutte le chiavi e le coppie di valori, devi chiamare i metodi "tasti" e "valori", proprio come faresti con un oggetto di tipo di dizionario in Python. Ecco un esempio di codice:

Scaffio di importazione
con scaffale.Apri ('Test.db ') come db:
elenco = elenco (db.elementi())
Chiavi = elenco (db.tasti ())
valori = elenco (db.valori())
Stampa (articoli)
Stampa (tasti)
Stampa (valori)

Come puoi vedere nel campione di codice sopra, "elementi", "chiavi" e metodi "valori" sono stati chiamati per recuperare chiavi e valori. Queste chiavi e valori sono oggetti di tipo Shelve, quindi è necessario convertirli in un elenco o in qualsiasi altro iterabile per ottenere i loro valori effettivi. Dopo aver eseguito il campione di codice sopra, è necessario ottenere il seguente output:

[("mele", 50), ("arance", 80)]
["mele", "arance"]
[50, 80]

Nota che se si desidera solo iterare su chiavi e valori, puoi farlo usando per loop o qualsiasi altra istruzione senza convertire chiavi e valori in un elenco di Python o qualsiasi altro oggetto di questo tipo.

Puoi serializzare le funzioni e le classi usando Shelve

Puoi serializzare qualsiasi oggetto Python usando il modulo Shelve, persino funzioni e classi. Ecco un esempio che illustra la serializzazione di una funzione, recuperandola e quindi chiamandolo per fare alcuni calcoli.

Scaffio di importazione
DEF Square (numero):
Numero di ritorno * Numero
con scaffale.Apri ('Test.db ', "w") come db:
db ['quadra_function'] = quadra
con scaffale.Apri ('Test.db ') come db:
Square = db ['Square_Function']
Stampa (quadrato (5))

È stata definita una nuova funzione chiamata "Square". Calcola il quadrato di un numero e lo restituisce. Successivamente, questa funzione viene serializzata usando Shelve e memorizzata nel test.File di database DB. La funzione serializzata viene quindi letta nella variabile "quadrata". Poiché la variabile quadrata è ora un'istanza della funzione quadrata definita in precedenza, puoi chiamarla per calcolare il quadrato di un numero.

Dopo aver eseguito il campione di codice sopra, è necessario ottenere il seguente output:

25

Conclusione

La serializzazione è un processo di archiviazione di oggetti Python in un file di database in modo che possano essere recuperati in una forma che è esattamente lo stesso di come sono stati originariamente definiti prima di serializzare. Ciò consente di archiviare oggetti Python complessi in formato strutturato. Il modulo Shelve utilizza il modulo sottaceto per archiviare e recuperare gli oggetti Python serializzati. Utilizza la struttura della coppia di valore chiave per gestire gli oggetti serializzati, rendendo più facile gestirli.