A Python, de vegades necessitem desar l'objecte al disc per a un ús posterior. Això es pot fer utilitzant Python pickle. En aquest article, aprendrem sobre els escabetx a Python juntament amb alguns exemples.
Python Pickle — Serialització d'objectes Python
Python mòdul d'escabetx s'utilitza per serialitzar i deserialitzar una estructura d'objectes Python. Qualsevol objecte de Python es pot desapar perquè es pugui desar al disc. El que fa Pickle és serialitza l'objecte abans d'escriure'l en un fitxer. Pickling és una manera de convertir un objecte Python (llista, diccionari, etc.) en un flux de caràcters. La idea és que aquest flux de caràcters contingui tota la informació necessària per reconstruir l'objecte en un altre Python guió. Proporciona una facilitat per convertir qualsevol objecte Python en un flux de bytes. Aquest flux de bytes conté tota la informació essencial sobre l'objecte per tal que es pugui reconstruir, o desengrasar i tornar a la seva forma original en qualsevol Python.

Funcionament d'una serialització
Exemple d'escabetx de Python
Decapat sense llima
En aquest exemple, serialitzarem les dades del diccionari i les emmagatzemarem en un flux de bytes. A continuació, aquestes dades es deserialitzen utilitzant pickle.loads() funció de nou a l'objecte Python original.
Python 3
tipus de dades seqüeles
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)> |
>
>
Sortida:
{'Omkar': {'key': 'Omkar', 'name': 'Omkar Pathak', 'age': 21, 'pay': 40000}, 'Jagdish': {'key': 'Jagdish', 'name': 'Jagdish Pathak', 'age': 50, 'pay': 50000}}> Decapat amb una llima
En aquest exemple, utilitzarem un fitxer pickle per escriure primer les dades amb la funció pickle.dump(). A continuació, utilitzant la funció pickle.load(), carregarem el pickle bé en l'script Python i imprimirem les seves dades en forma de diccionari de Python.
Python 3
# 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()> |
>
>
Sortida:
Omkar =>{'clau': 'Omkar', 'nom': 'Omkar Pathak', 'edat': 21, 'pagament': 40000} Jagdish => {'clau' ': 'Jagdish', 'nom': 'Jagdish Pathak', 'edat': 50, 'pay': 50000}> Avantatges d'utilitzar Pickle a Python
- Objectes recursius (objectes que contenen referències a ells mateixos): Pickle fa un seguiment dels objectes que ja ha serialitzat, de manera que les referències posteriors al mateix objecte no es tornaran a serialitzar. (El mòdul marshal es trenca per això.)
- Compartició d'objectes (referències al mateix objecte en diferents llocs): Això és semblant als objectes d'auto-referència. Pickle emmagatzema l'objecte una vegada i assegura que totes les altres referències apunten a la còpia mestra. Els objectes compartits romanen compartits, cosa que pot ser molt important per als objectes mutables.
- Classes definides per l'usuari i les seves instàncies: Marshal no els admet en absolut, però Pickle pot desar i restaurar instàncies de classe de manera transparent. La definició de classe ha de ser importable i conviure al mateix mòdul que quan es va emmagatzemar l'objecte.
Desavantatges d'utilitzar Pickle a Python
- Dependència de la versió de Python: Les dades de Picle són tan sensibles a la versió de Python que es va produir. Objecte en vinagre creat amb una versió de Python que pot ser que no es desencaptilli amb diverses versions.
- No llegible: El format de pickle és binari i els humans no poden llegir ni editar fàcilment. Els contractes que estan en format JSON o XML es poden modificar fàcilment.
- Gran ineficiència de dades: Els grans conjunts de dades poden alentir el decapatge i el decapatge. La serialització podria ser més adequada per a aquests casos d'ús.
Conclusió
Tot i que Python Pickle ofereix capacitats per a la serialització d'objectes, els desenvolupadors mantenen les limitacions, especialment mentre treballen amb diverses versions de Python o s'ocupen de grans conjunts de dades. És important recordar sempre que tingueu en compte les necessitats específiques de la vostra aplicació per determinar si ickle o una alternativa com JSON, XML és adequada per a la serialització.