logo

Pochopení Python Picking na příkladu

V Pythonu občas potřebujeme uložit objekt na disk pro pozdější použití. To lze provést pomocí Python pickle. V tomto článku se dozvíme o okurkách v Pythonu spolu s několika příklady.

Python Pickle — serializace objektů Python

Krajta okurkový modul se používá pro serializaci a de-serializaci objektové struktury Pythonu. Jakýkoli objekt v Pythonu lze vybrat, aby se dal uložit na disk. Pickle dělá, že objekt nejprve serializuje, než jej zapíše do souboru. Pickling je způsob, jak převést objekt Pythonu (seznam, slovník atd.) na proud znaků. Myšlenka je taková, že tento znakový proud obsahuje všechny informace potřebné k rekonstrukci objektu v jiném Krajta skript. Poskytuje možnost převést jakýkoli objekt Pythonu na byte stream. Tento Byte stream obsahuje všechny podstatné informace o objektu, takže jej lze rekonstruovat nebo rozbalit a vrátit se zpět do své původní podoby v jakémkoli Pythonu.



Picking-In-python-(1)

Práce na serializaci

Příklad Python Pickle

Moření bez souboru

V tomto příkladu budeme serializovat data slovníku a ukládat je do bajtového proudu. Poté jsou tato data deserializována pomocí pickle.loads() funkce zpět do původního objektu Pythonu.

Python3



algoritmus rychlého třídění






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)>

>

xor cpp

>

Výstup:

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

Moření pilníkem

V tomto příkladu použijeme soubor pickle k tomu, abychom do něj nejprve zapsali data pomocí funkce pickle.dump(). Poté pomocí funkce pickle.load() načteme pickle fine do skriptu Python a vytiskneme jeho data ve formě slovníku 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()>

>

arp - příkaz

>

Výstup:

Omkar =>{'key': 'Omkar', 'name': 'Omkar Pathak', 'věk': 21, 'pay': 40000} Jagdish => {'key ': 'Jagdish', 'jméno': 'Jagdish Pathak', 'věk': 50, 'platba': 50 000}>

Výhody použití Pickle v Pythonu

  1. Rekurzivní objekty (objekty obsahující odkazy na sebe): Pickle sleduje objekty, které již serializoval, takže pozdější odkazy na stejný objekt nebudou znovu serializovány. (Modul maršála se kvůli tomu rozbije.)
  2. Sdílení objektů (odkazy na stejný objekt na různých místech): Je to podobné jako u objektů s odkazem na sebe. Pickle uloží objekt jednou a zajistí, že všechny ostatní odkazy ukazují na hlavní kopii. Sdílené objekty zůstávají sdílené, což může být u měnitelných objektů velmi důležité.
  3. Uživatelem definované třídy a jejich instance: Marshal je vůbec nepodporuje, ale Pickle může ukládat a obnovovat instance tříd transparentně. Definice třídy musí být importovatelná a musí existovat ve stejném modulu, jako když byl objekt uložen.

Nevýhody používání Pickle v Pythonu

  1. Závislost na verzi Pythonu: Data picle jsou tak citlivá na verzi Pythonu, která byla vytvořena. Nakládaný objekt vytvořený jednou verzí Pythonu, který nemusí být odstraněn s různými verzemi.
  2. Nečitelné: Formát nálevu je binární a není snadno čitelný nebo upravitelný lidmi. Smlouvy, které jsou ve formátu JSON nebo XML, lze snadno upravit.
  3. Velká datová neefektivita: Velké datové sady mohou zpomalit moření a odmořování. Pro takové případy použití může být vhodnější serializace.

Závěr

Zatímco Python Pickle nabízí možnosti pro serializaci objektů, vývojářům, kteří zachovávají omezení, zejména při práci s různými verzemi Pythonu nebo při práci s velkými datovými sadami. Je důležité mít na paměti, že vždy zvažte specifické potřeby vaší aplikace, abyste určili, zda je pro serializaci vhodný ickle nebo alternativa, jako je JSON, XML.