V Pythonu moramo včasih objekt shraniti na disk za kasnejšo uporabo. To lahko storite z uporabo Python pickle. V tem članku bomo skupaj z nekaj primeri spoznali kumarice v Pythonu.
Python Pickle — Serializacija objektov Python
Python modul kislih kumaric se uporablja za serializacijo in deserializacijo objektne strukture Python. Vsak predmet v Pythonu je mogoče izbrati tako, da ga je mogoče shraniti na disk. Pickle najprej serializira predmet, preden ga zapiše v datoteko. Pickling je način za pretvorbo predmeta Python (seznam, slovar itd.) v tok znakov. Ideja je, da ta tok znakov vsebuje vse informacije, potrebne za rekonstrukcijo predmeta v drugem Python scenarij. Zagotavlja možnost pretvorbe katerega koli objekta Python v tok bajtov. Ta tok bajtov vsebuje vse bistvene informacije o predmetu, tako da ga je mogoče rekonstruirati ali odstraniti in se vrniti v prvotno obliko v katerem koli Pythonu.

Delovanje serializacije
Primer Python Pickle
Kisanje brez pile
V tem primeru bomo slovarske podatke serializirali in jih shranili v bajtni tok. Nato se ti podatki deserializirajo z uporabo pickle.loads() funkcijo nazaj v izvirni objekt Python.
Python3
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)> |
>
>
Izhod:
{'Omkar': {'key': 'Omkar', 'name': 'Omkar Pathak', 'age': 21, 'pay': 40000}, 'Jagdish': {'key': 'Jagdish', 'name': 'Jagdish Pathak', 'age': 50, 'pay': 50000}}> Kisanje s pilo
V tem primeru bomo uporabili datoteko pickle, da vanjo najprej zapišemo podatke s funkcijo pickle.dump(). Nato bomo s funkcijo pickle.load() naložili pickle fine v skript Python in natisnili njegove podatke v obliki slovarja Python.
Python3
kako inicializirati matriko v Javi
# 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()> |
>
>
Izhod:
Omkar =>{'ključ': 'Omkar', 'ime': 'Omkar Pathak', 'starost': 21, 'plačilo': 40000} Jagdish => {'ključ ': 'Jagdish', 'ime': 'Jagdish Pathak', 'starost': 50, 'plačilo': 50000}> Prednosti uporabe Pickle v Pythonu
- Rekurzivni objekti (objekti, ki vsebujejo reference nase): Pickle spremlja objekte, ki jih je že serializiral, tako da kasnejše reference na isti objekt ne bodo ponovno serializirane. (Marshal modul se zaradi tega zlomi.)
- Skupna raba objekta (sklici na isti objekt na različnih mestih): To je podobno predmetom, ki se nanašajo na samega sebe. Pickle enkrat shrani predmet in zagotovi, da vse druge reference kažejo na glavno kopijo. Objekti v skupni rabi ostanejo v skupni rabi, kar je lahko zelo pomembno za spremenljive objekte.
- Uporabniško definirani razredi in njihovi primerki: Marshal jih sploh ne podpira, Pickle pa lahko pregledno shrani in obnovi primerke razreda. Definicijo razreda mora biti mogoče uvoziti in živeti v istem modulu kot takrat, ko je bil objekt shranjen.
Slabosti uporabe Pickle v Pythonu
- Odvisnost od različice Python: Podatki picle so tako občutljivi na različico Pythona, ki je nastala. Izbran predmet, ustvarjen z eno različico Pythona, ki ga morda ne bo mogoče razbrati z različnimi različicami.
- Neberljivo: Format pickle je binarni in ga ljudje težko berejo ali urejajo. Pogodbe, ki so v formatu JSON ali XML, je mogoče enostavno spremeniti.
- Velika podatkovna neučinkovitost: Veliki nabori podatkov lahko upočasnijo dekapiranje in dekapiranje. Serializacija bi bila morda primernejša za takšne primere uporabe.
Zaključek
Medtem ko Python Pickle ponuja zmožnosti za serializacijo objektov, razvijalci, ki ohranjajo omejitve, zlasti pri delu v različnih različicah Pythona ali pri delu z velikimi nabori podatkov. Pomembno si je zapomniti, da vedno upoštevate posebne potrebe vaše aplikacije, da ugotovite, ali je ickle ali alternativa, kot je JSON, XML, primerna za serializacijo.