logo

Comprendere il decapaggio di Python con un esempio

In Python, a volte abbiamo bisogno di salvare l'oggetto sul disco per un uso successivo. Questo può essere fatto usando Python pickle. In questo articolo impareremo i sottaceti in Python insieme ad alcuni esempi.

Python Pickle: serializzazione di oggetti Python

Pitone modulo sottaceto viene utilizzato per serializzare e deserializzare una struttura di oggetti Python. Qualsiasi oggetto in Python può essere decapato in modo da poter essere salvato su disco. Ciò che Pickle fa è serializzare l'oggetto prima di scriverlo su un file. Il pickling è un modo per convertire un oggetto Python (elenco, dizionario, ecc.) in un flusso di caratteri. L'idea è che questo flusso di caratteri contenga tutte le informazioni necessarie per ricostruire l'oggetto in un altro Pitone sceneggiatura. Fornisce la possibilità di convertire qualsiasi oggetto Python in un flusso di byte. Questo flusso di byte contiene tutte le informazioni essenziali sull'oggetto in modo che possa essere ricostruito o deselezionato e tornare nella sua forma originale in qualsiasi Python.



cos'è Maven
Decapaggio-In-python-(1)

Lavorazione di una serializzazione

Esempio di sottaceto Python

Decapaggio senza lima

In questo esempio serializzeremo i dati del dizionario e li memorizzeremo in un flusso di byte. Quindi questi dati vengono deserializzati utilizzando pickle.carichi() funzione nell'oggetto Python originale.

Python3








differenza simmetrica
import> pickle> # initializing data to be stored in db> Omkar>=> {>'key'> :>'Omkar'>,>'name'> :>'Omkar Pathak'>,> 'age'> :>21>,>'pay'> :>40000>}> Jagdish>=> {>'key'> :>'Jagdish'>,>'name'> :>'Jagdish Pathak'>,> 'age'> :>50>,>'pay'> :>50000>}> # database> db>=> {}> db[>'Omkar'>]>=> Omkar> db[>'Jagdish'>]>=> Jagdish> # For storing> # type(b) gives ;> b>=> pickle.dumps(db)> # For loading> myEntry>=> pickle.loads(b)> print>(myEntry)>

>

>

Produzione:

importa scanner java
{'Omkar': {'key': 'Omkar', 'name': 'Omkar Pathak', 'age': 21, 'pay': 40000},  'Jagdish': {'key': 'Jagdish', 'name': 'Jagdish Pathak', 'age': 50, 'pay': 50000}}>

Decapaggio con una lima

In questo esempio, utilizzeremo un file pickle per scrivere prima i dati al suo interno utilizzando la funzione pickle.dump(). Quindi, utilizzando la funzione pickle.load(), caricheremo pickle fine nello script Python e stamperemo i suoi dati sotto forma di dizionario Python.

Python3




# Python3 program to illustrate store> # efficiently using pickle module> # Module translates an in-memory Python object> # into a serialized byte stream—a string of> # bytes that can be written to any file-like object.> import> pickle> def> storeData():> ># initializing data to be stored in db> >Omkar>=> {>'key'> :>'Omkar'>,>'name'> :>'Omkar Pathak'>,> >'age'> :>21>,>'pay'> :>40000>}> >Jagdish>=> {>'key'> :>'Jagdish'>,>'name'> :>'Jagdish Pathak'>,> >'age'> :>50>,>'pay'> :>50000>}> ># database> >db>=> {}> >db[>'Omkar'>]>=> Omkar> >db[>'Jagdish'>]>=> Jagdish> > ># Its important to use binary mode> >dbfile>=> open>(>'examplePickle'>,>'ab'>)> > ># source, destination> >pickle.dump(db, dbfile)> >dbfile.close()> def> loadData():> ># for reading also binary mode is important> >dbfile>=> open>(>'examplePickle'>,>'rb'>)> >db>=> pickle.load(dbfile)> >for> keys>in> db:> >print>(keys,>'=>'>, db[keys])> >dbfile.close()> if> __name__>=>=> '__main__'>:> >storeData()> >loadData()>

arraylist Java ordinato

Freddie Mercury
>

>

Produzione:

Omkar =>{'key': 'Omkar', 'name': 'Omkar Pathak', 'age': 21, 'pay': 40000} Jagdish => {'key ': 'Jagdish', 'nome': 'Jagdish Pathak', 'età': 50, 'paga': 50000}>

Vantaggi dell'utilizzo di Pickle in Python

  1. Oggetti ricorsivi (oggetti contenenti riferimenti a se stessi): Pickle tiene traccia degli oggetti che ha già serializzato, quindi i riferimenti successivi allo stesso oggetto non verranno serializzati nuovamente. (Il modulo Marshal si rompe per questo.)
  2. Condivisione di oggetti (riferimenti allo stesso oggetto in luoghi diversi): Questo è simile agli oggetti autoreferenziali. Pickle memorizza l'oggetto una volta e garantisce che tutti gli altri riferimenti puntino alla copia principale. Gli oggetti condivisi rimangono condivisi, il che può essere molto importante per gli oggetti mutabili.
  3. Classi definite dall'utente e relative istanze: Marshal non li supporta affatto, ma Pickle può salvare e ripristinare le istanze delle classi in modo trasparente. La definizione della classe deve essere importabile e risiedere nello stesso modulo di quando l'oggetto è stato archiviato.

Svantaggi dell'uso di Pickle in Python

  1. Dipendenza dalla versione di Python: I dati di picle sono così sensibili alla versione di Python prodotta. Oggetto serializzato creato con una versione di Python che potrebbe non essere deselezionato con varie versioni.
  2. Non leggibile: Il formato di pickle è binario e non facilmente leggibile o modificabile dagli esseri umani. I contratti in formato JSON o XML possono essere facilmente modificati.
  3. Inefficienza dei dati di grandi dimensioni: Set di dati di grandi dimensioni possono rallentare il decapaggio e il deserializzazione. La serializzazione potrebbe essere più appropriata per tali casi d'uso.

Conclusione

Sebbene Python Pickle offra funzionalità per la serializzazione di oggetti, gli sviluppatori mantengono delle limitazioni, soprattutto mentre lavorano su varie versioni di Python o si occupano di set di dati di grandi dimensioni. È importante ricordare di considerare sempre le esigenze specifiche della tua applicazione per determinare se ickle o un'alternativa come JSON, XML è adatta per la serializzazione.