logo

Înțelegerea Python Pickling cu un exemplu

În Python, uneori trebuie să salvăm obiectul pe disc pentru o utilizare ulterioară. Acest lucru se poate face folosind Python pickle. În acest articol, vom afla despre murăturile în Python împreună cu câteva exemple.

Python Pickle — Serializarea obiectelor Python

Piton modul murături este utilizat pentru serializarea și deserializarea unei structuri de obiect Python. Orice obiect din Python poate fi decapat astfel încât să poată fi salvat pe disc. Ce face Pickle este că serializează obiectul înainte de a-l scrie într-un fișier. Pickling este o modalitate de a converti un obiect Python (listă, dicționar etc.) într-un flux de caractere. Ideea este că acest flux de caractere conține toate informațiile necesare pentru a reconstrui obiectul în altul Piton scenariu. Oferă o facilitate pentru a converti orice obiect Python într-un flux de octeți. Acest flux de octeți conține toate informațiile esențiale despre obiect, astfel încât să poată fi reconstruit sau decapat și să revină la forma sa originală în orice Python.



Decapare-în-python-(1)

Funcționarea unei serializări

Exemplu de murături Python

Decapare fără pile

În acest exemplu, vom serializa datele din dicționar și le vom stoca într-un flux de octeți. Apoi aceste date sunt deserializate folosind pickle.loads() funcția înapoi în obiectul original Python.

Python3






ciclul de viață sdlc



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

>

>

Ieșire:

js șir cu mai multe linii
{'Omkar': {'key': 'Omkar', 'name': 'Omkar Pathak', 'age': 21, 'pay': 40000},  'Jagdish': {'key': 'Jagdish', 'name': 'Jagdish Pathak', 'age': 50, 'pay': 50000}}>

Decaparea cu Pila

În acest exemplu, vom folosi un fișier pickle pentru a scrie mai întâi datele în el folosind funcția pickle.dump(). Apoi, folosind funcția pickle.load(), vom încărca pickle fine în scriptul Python și vom imprima datele sale sub forma unui dicționar 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()>

>

>

Ieșire:

Omkar =>{'cheie': 'Omkar', 'nume': 'Omkar Pathak', 'vârsta': 21, 'pay': 40000} Jagdish => {'cheie' ': 'Jagdish', 'nume': 'Jagdish Pathak', 'vârsta': 50, 'pay': 50000}>

Avantajele utilizării Pickle în Python

  1. Obiecte recursive (obiecte care conțin referințe la ele însele): Pickle ține evidența obiectelor pe care le-a serializat deja, astfel încât referințele ulterioare la același obiect nu vor fi serializate din nou. (Modulul mareșal se întrerupe pentru asta.)
  2. Partajarea obiectelor (referințe la același obiect în locuri diferite): Acest lucru este similar cu obiectele de auto-referință. Pickle stochează obiectul o dată și se asigură că toate celelalte referințe indică către copia principală. Obiectele partajate rămân partajate, ceea ce poate fi foarte important pentru obiectele mutabile.
  3. Clasele definite de utilizator și instanțele acestora: Marshal nu le acceptă deloc, dar Pickle poate salva și restabili instanțe de clasă în mod transparent. Definiția clasei trebuie să fie importabilă și să trăiască în același modul ca atunci când obiectul a fost stocat.

Dezavantajele utilizării Pickle în Python

  1. Dependența versiunii Python: Datele picle sunt atât de sensibile la versiunea de Python produsă. Obiect decapat creat cu o versiune de Python care ar putea să nu fie decapat cu diferite versiuni.
  2. Necitit: Formatul de murături este binar și nu poate fi ușor de citit sau editat de oameni. Contractele care sunt în format JSON sau XML pot fi modificate cu ușurință.
  3. Ineficiență mare a datelor: Seturile mari de date pot încetini decaparea și decaparea. Serializarea ar putea fi mai potrivită pentru astfel de cazuri de utilizare.

Concluzie

În timp ce Python Pickle oferă capabilități de serializare a obiectelor, dezvoltatorii care mențin limitări, în special atunci când lucrează cu diferite versiuni Python sau se ocupă cu seturi de date mari. Este important să rețineți că luați în considerare întotdeauna nevoile specifice ale aplicației dvs. pentru a determina dacă ickle sau o alternativă precum JSON, XML este potrivită pentru serializare.

.egal cu java