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?

È stato utile?

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].

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top