logo

Python Pickling begrijpen met een voorbeeld

In Python moeten we het object soms op de schijf opslaan voor later gebruik. Dit kan gedaan worden door Python-augurk te gebruiken. In dit artikel leren we over augurken in Python, samen met een paar voorbeelden.

Hoe vind ik verborgen apps op Android

Python Pickle - Serialisatie van Python-objecten

Python augurk module wordt gebruikt voor het serialiseren en deserialiseren van een Python-objectstructuur. Elk object in Python kan worden gebeitst, zodat het op schijf kan worden opgeslagen. Wat Pickle doet, is dat het het object eerst serialiseert voordat het naar een bestand wordt geschreven. Pickling is een manier om een ​​Python-object (lijst, woordenboek, etc.) om te zetten in een karakterstroom. Het idee is dat deze karakterstroom alle informatie bevat die nodig is om het object in een ander object te reconstrueren Python script. Het biedt de mogelijkheid om elk Python-object naar een bytestream te converteren. Deze bytestream bevat alle essentiële informatie over het object, zodat het in elke Python kan worden gereconstrueerd of gedepickeerd en in zijn oorspronkelijke vorm kan worden teruggebracht.



Pickling-In-python-(1)

Werking van een serialisatie

Voorbeeld van Python Pickle

Beitsen zonder vijl

In dit voorbeeld zullen we de woordenboekgegevens serialiseren en opslaan in een bytestroom. Vervolgens worden deze gegevens gedeserialiseerd met behulp van augurk.loads() functioneren terug in het originele Python-object.

Python3








waar is de sleutel op het toetsenbord van de laptop

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

>

>

Uitgang:

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

Beitsen met een vijl

In dit voorbeeld gebruiken we een pickle-bestand om eerst de gegevens erin te schrijven met behulp van de functie pickle.dump(). Vervolgens gebruiken we de functie pickle.load() om de augurk in het Python-script te laden en de gegevens ervan af te drukken in de vorm van een Python-woordenboek.

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

>

aw java

>

Uitgang:

Omkar =>{'sleutel': 'Omkar', 'naam': 'Omkar Pathak', 'leeftijd': 21, 'betaling': 40000} Jagdish => {'sleutel ': 'Jagdish', 'naam': 'Jagdish Pathak', 'leeftijd': 50, 'betaling': 50000}>

Voordelen van het gebruik van Pickle in Python

  1. Recursieve objecten (objecten die verwijzingen naar zichzelf bevatten): Pickle houdt de objecten bij die het al heeft geserialiseerd, zodat latere verwijzingen naar hetzelfde object niet opnieuw worden geserialiseerd. (De marshalmodule breekt hiervoor.)
  2. Object delen (verwijzingen naar hetzelfde object op verschillende plaatsen): Dit is vergelijkbaar met naar zichzelf verwijzende objecten. Pickle slaat het object één keer op en zorgt ervoor dat alle andere verwijzingen naar de hoofdkopie verwijzen. Gedeelde objecten blijven gedeeld, wat erg belangrijk kan zijn voor veranderlijke objecten.
  3. Door de gebruiker gedefinieerde klassen en hun instanties: Marshal ondersteunt deze helemaal niet, maar Pickle kan klasse-instanties transparant opslaan en herstellen. De klassedefinitie moet importeerbaar zijn en in dezelfde module staan ​​als toen het object werd opgeslagen.

Nadelen van het gebruik van Pickle in Python

  1. Afhankelijkheid van Python-versie: Gegevens van picle zijn zo gevoelig voor de versie van Python die is geproduceerd. Ingemaakt object gemaakt met één versie van Python dat mogelijk niet wordt verwijderd met verschillende versies.
  2. Niet-leesbaar: Het formaat van augurk is binair en niet gemakkelijk leesbaar of bewerkbaar voor mensen. De contracten die in JSON- of XML-formaat zijn, kunnen eenvoudig worden aangepast.
  3. Grote data-inefficiëntie: Grote datasets kunnen het beitsen en ontbeitsen vertragen. Serialisatie is mogelijk geschikter voor dergelijke gebruiksscenario's.

Conclusie

Hoewel Python Pickle mogelijkheden biedt voor objectserialisatie, hanteren ontwikkelaars beperkingen, vooral als ze met verschillende Python-versies werken of met grote datasets werken. Het is belangrijk om te onthouden dat u altijd rekening moet houden met de specifieke behoeften van uw toepassing om te bepalen of XML of een alternatief zoals JSON geschikt is voor serialisatie.