V Pythone niekedy potrebujeme uložiť objekt na disk pre neskoršie použitie. Dá sa to urobiť pomocou Python pickle. V tomto článku sa dozvieme o uhorkách v Pythone spolu s niekoľkými príkladmi.
Python Pickle — serializácia objektov Pythonu
Python moriaci modul sa používa na serializáciu a de-serializáciu objektovej štruktúry Pythonu. Akýkoľvek objekt v Pythone je možné vybrať, aby sa dal uložiť na disk. Pickle robí najprv serializáciu objektu pred jeho zápisom do súboru. Morenie je spôsob, ako previesť objekt Pythonu (zoznam, slovník atď.) na prúd znakov. Myšlienka je, že tento prúd znakov obsahuje všetky informácie potrebné na rekonštrukciu objektu v inom Python skript. Poskytuje možnosť previesť akýkoľvek objekt Pythonu na bajtový prúd. Tento Byte stream obsahuje všetky podstatné informácie o objekte, aby ho bolo možné zrekonštruovať, alebo rozbaliť a dostať späť do svojej pôvodnej podoby v akomkoľvek Pythone.

Práca na serializácii
Príklad Python Pickle
Morenie bez súboru
V tomto príklade budeme serializovať údaje zo slovníka a uložíme ich do toku bajtov. Potom sa tieto údaje deserializujú pomocou pickle.loads() funkciu späť do pôvodného objektu Python.
Python3
abecedu podľa čísla
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)> |
>
>
Výkon:
značka zuckerberg vzdelanie
{'Omkar': {'key': 'Omkar', 'name': 'Omkar Pathak', 'age': 21, 'pay': 40000}, 'Jagdish': {'key': 'Jagdish', 'name': 'Jagdish Pathak', 'age': 50, 'pay': 50000}}> Morenie pilníkom
V tomto príklade použijeme súbor pickle na to, aby sme doň najskôr zapísali údaje pomocou funkcie pickle.dump(). Potom pomocou funkcie pickle.load() načítame pickle fine do skriptu Python a vytlačíme jeho údaje vo forme slovníka 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()> |
>
>
Výkon:
Omkar =>{'key': 'Omkar', 'meno': 'Omkar Pathak', 'vek': 21, 'pay': 40000} Jagdish => {'key ': 'Jagdish', 'meno': 'Jagdish Pathak', 'vek': 50, 'platba': 50 000}> Výhody použitia Pickle v Pythone
- Rekurzívne objekty (objekty obsahujúce odkazy na seba): Pickle sleduje objekty, ktoré už serializoval, takže neskoršie odkazy na ten istý objekt už nebudú serializované. (Modul maršala sa kvôli tomu rozbije.)
- Zdieľanie objektov (odkazy na rovnaký objekt na rôznych miestach): Je to podobné ako pri objektoch s odkazmi na seba. Pickle uloží objekt raz a zabezpečí, aby všetky ostatné odkazy smerovali na hlavnú kópiu. Zdieľané objekty zostávajú zdieľané, čo môže byť veľmi dôležité pre meniteľné objekty.
- Používateľom definované triedy a ich inštancie: Marshal ich vôbec nepodporuje, ale Pickle dokáže ukladať a obnovovať inštancie tried transparentne. Definícia triedy musí byť importovateľná a musí existovať v rovnakom module, ako keď bol objekt uložený.
Nevýhody používania Pickle v Pythone
- Závislosť od verzie Pythonu: Údaje picle sú tak citlivé na verziu Pythonu, ktorá bola vytvorená. Nakladaný objekt vytvorený jednou verziou Pythonu, ktorý nemusí byť odstránený s rôznymi verziami.
- Nečitateľné: Formát uhorky je binárny a nie je ľahko čitateľný alebo upraviteľný pre ľudí. Zmluvy, ktoré sú vo formáte JSON alebo XML, sa dajú ľahko upraviť.
- Veľká dátová neefektívnosť: Veľké súbory údajov môžu spomaliť morenie a odmorovanie. Pre takéto prípady použitia môže byť vhodnejšia serializácia.
Záver
Zatiaľ čo Python Pickle ponúka možnosti pre serializáciu objektov, vývojári, ktorí zachovávajú obmedzenia, najmä pri práci s rôznymi verziami Pythonu alebo pri práci s veľkými množinami údajov. Je dôležité mať na pamäti, že vždy zvážte špecifické potreby vašej aplikácie, aby ste určili, či je na serializáciu vhodný icle alebo alternatíva ako JSON, XML.
log4j