I Python skal vi nogle gange gemme objektet på disken til senere brug. Dette kan gøres ved at bruge Python pickle. I denne artikel vil vi lære om pickles i Python sammen med et par eksempler.
Python Pickle — Python-objektserialisering
Python pickle modul bruges til at serialisere og de-serialisere en Python-objektstruktur. Ethvert objekt i Python kan syltes, så det kan gemmes på disken. Hvad Pickle gør er, at den serialiserer objektet først, før det skrives til en fil. Pickling er en måde at konvertere et Python-objekt (liste, ordbog osv.) til en karakterstrøm. Ideen er, at denne karakterstrøm indeholder al den information, der er nødvendig for at rekonstruere objektet i et andet Python manuskript. Det giver mulighed for at konvertere ethvert Python-objekt til en byte-strøm. Denne byte-strøm indeholder alle væsentlige oplysninger om objektet, så det kan rekonstrueres eller ophæves og komme tilbage til sin oprindelige form i enhver Python.

Arbejde med en serialisering
Eksempel på Python Pickle
Bejdsning uden fil
I dette eksempel vil vi serialisere ordbogsdataene og gemme dem i en bytestrøm. Derefter deserialiseres disse data vha pickle.loads() funktion tilbage til det originale Python-objekt.
salman khan alder
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)> |
registrere hukommelse
>
>
Produktion:
java system.out.println
{'Omkar': {'key': 'Omkar', 'name': 'Omkar Pathak', 'age': 21, 'pay': 40000}, 'Jagdish': {'key': 'Jagdish', 'name': 'Jagdish Pathak', 'age': 50, 'pay': 50000}}> Syltning med en fil
I dette eksempel vil vi bruge en pickle-fil til først at skrive dataene i den ved hjælp af pickle.dump()-funktionen. Ved at bruge funktionen pickle.load() vil vi indlæse pickle fint i Python-scriptet og udskrive dets data i form af en Python-ordbog.
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()> |
nat vs seng
>
>
Produktion:
vælg fra flere tabeller sql
Omkar =>{'key': 'Omkar', 'navn': 'Omkar Pathak', 'alder': 21, 'pay': 40000} Jagdish => {'key ': 'Jagdish', 'navn': 'Jagdish Pathak', 'alder': 50, 'pay': 50000}> Fordele ved at bruge Pickle i Python
- Rekursive objekter (objekter, der indeholder referencer til sig selv): Pickle holder styr på de objekter, den allerede har serialiseret, så senere referencer til det samme objekt bliver ikke serialiseret igen. (Marskalmodulet går i stykker for dette.)
- Objektdeling (referencer til det samme objekt forskellige steder): Dette svarer til selvhenvisningsobjekter. Pickle gemmer objektet én gang og sikrer, at alle andre referencer peger på masterkopien. Delte objekter forbliver delte, hvilket kan være meget vigtigt for foranderlige objekter.
- Brugerdefinerede klasser og deres forekomster: Marshal understøtter slet ikke disse, men Pickle kan gemme og gendanne klasseforekomster gennemsigtigt. Klassedefinitionen skal kunne importeres og leve i samme modul, som da objektet blev gemt.
Ulemper ved at bruge Pickle i Python
- Python-versionsafhængighed: Data for picle er så følsomme over for den version af Python, der blev produceret. Syltet objekt oprettet med én version af Python, som måske ikke er opsyltet med forskellige versioner.
- Ikke-læselig: Formatet af pickle er binært og ikke let læseligt eller redigerbart af mennesker. De kontrakter, der er i JSON- eller XML-format, kan nemt ændres.
- Stor dataineffektivitet: Store datasæt kan bremse bejdsningen og afbejdsningen. Serialisering kan være mere passende til sådanne use-cases.
Konklusion
Mens Python Pickle tilbyder muligheder for objektserialisering, udviklere, der opretholder begrænsninger, især mens de arbejder på tværs af forskellige Python-versioner eller beskæftiger sig med de store datasæt. Det er vigtigt at huske altid at overveje de specifikke behov for din applikation for at afgøre, om ickle eller et alternativ som JSON, XML er egnet til serialisering.