Qual è la differenza tra salamoia e ripiano?
-
29-09-2019 - |
Domanda
sto imparando sulla serializzazione degli oggetti per la prima volta. Ho provato leggendo e 'googling' per le differenze nei moduli salamoia e ripiano, ma io non sono sicuro di aver capito che. Quando usare quale? Pickle può trasformare ogni oggetto pitone nel flusso di byte che possono essere persisteva in un file. Allora perché abbiamo bisogno del ripiano modulo? Non è salamoia più veloce?
Soluzione
pickle
è per la serializzazione di un oggetto (o gli oggetti) come un unico bytestream in un file.
shelve
si basa sulla parte superiore del pickle
e implementa un dizionario serializzazione in cui vengono serializzate oggetti, ma associata a una chiave (una stringa), in modo da poter caricare il file di dati accantonato ed accedi ai tuoi oggetti in salamoia via le chiavi. Questo potrebbe essere più conveniente erano voi di essere serializzazione molti oggetti.
Ecco un esempio di utilizzo tra i due. (Dovrebbe funzionare in tutte le versioni di Python 2.7 e Python 3.x).
pickle
Esempio
import pickle
integers = [1, 2, 3, 4, 5]
with open('pickle-example.p', 'wb') as pfile:
pickle.dump(integers, pfile)
Questa scaricherà la lista integers
in un file binario denominato pickle-example.p
.
Ora provare a leggere la parte posteriore del file in salamoia.
import pickle
with open('pickle-example.p', 'rb') as pfile:
integers = pickle.load(pfile)
print integers
È possibile che questo dovrebbe uscita [1, 2, 3, 4, 5]
.
shelve
Esempio
import shelve
integers = [1, 2, 3, 4, 5]
# If you're using Python 2.7, import contextlib and use
# the line:
# with contextlib.closing(shelve.open('shelf-example', 'c')) as shelf:
with shelve.open('shelf-example', 'c') as shelf:
shelf['ints'] = integers
Si noti come si aggiungono oggetti alla piattaforma tramite dizionario-come l'accesso.
Leggi la parte posteriore dell'oggetto con il codice come il seguente:
import shelve
# If you're using Python 2.7, import contextlib and use
# the line:
# with contextlib.closing(shelve.open('shelf-example', 'r')) as shelf:
with shelve.open('shelf-example', 'r') as shelf:
for key in shelf.keys():
print(repr(key), repr(shelf[key])))
L'output sarà 'ints', [1, 2, 3, 4, 5]
.