logo

Förstå Python Pickling med exempel

I Python behöver vi ibland spara objektet på disken för senare användning. Detta kan göras genom att använda Python pickle. I den här artikeln kommer vi att lära oss om pickles i Python tillsammans med några exempel.

Python Pickle — Python-objektserialisering

Pytonorm inläggningsmodul används för att serialisera och avserialisera en Python-objektstruktur. Alla objekt i Python kan betas så att de kan sparas på disk. Vad Pickle gör är att den serialiserar objektet först innan du skriver det till en fil. Betning är ett sätt att konvertera ett Python-objekt (lista, ordbok, etc.) till en teckenström. Tanken är att denna teckenström innehåller all information som behövs för att rekonstruera objektet i ett annat Pytonorm manus. Det ger en möjlighet att konvertera alla Python-objekt till en byteström. Den här byteströmmen innehåller all viktig information om objektet så att det kan rekonstrueras eller avbeläggas och återgå till sin ursprungliga form i vilken Python som helst.



Betning-i-python-(1)

Arbeta med en serialisering

Exempel på Python Pickle

Betning utan fil

I det här exemplet kommer vi att serialisera ordboksdata och lagra dem i en byteström. Sedan deserialiseras denna data med hjälp av pickle.loads() funktion tillbaka till det ursprungliga Python-objektet.

Python3



hitta i kartan c++






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

>

vad är skillnaden mellan en megabyte och en gigabyte
>

Produktion:

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

Betning med en fil

I det här exemplet kommer vi att använda en pickle-fil för att först skriva data i den med hjälp av pickle.dump()-funktionen. Med hjälp av pickle.load()-funktionen kommer vi att ladda pickle-finen i Python-skriptet och skriva ut dess data i form av en Python-ordbok.

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

>

javascript-datum

>

Produktion:

Omkar =>{'key': 'Omkar', 'name': 'Omkar Pathak', 'age': 21, 'pay': 40000} Jagdish => {'key ': 'Jagdish', 'namn': 'Jagdish Pathak', 'ålder': 50, 'pay': 50000}>

Fördelar med att använda Pickle i Python

  1. Rekursiva objekt (objekt som innehåller referenser till sig själva): Pickle håller reda på objekten som den redan har serialiserat, så senare referenser till samma objekt kommer inte att serialiseras igen. (Marskalkmodulen går sönder för detta.)
  2. Objektdelning (referenser till samma objekt på olika platser): Detta liknar självreferensobjekt. Pickle lagrar objektet en gång och ser till att alla andra referenser pekar på masterkopian. Delade objekt förblir delade, vilket kan vara mycket viktigt för föränderliga objekt.
  3. Användardefinierade klasser och deras instanser: Marshal stöder inte dessa alls, men Pickle kan spara och återställa klassinstanser transparent. Klassdefinitionen måste vara importbar och leva i samma modul som när objektet lagrades.

Nackdelar med att använda Pickle i Python

  1. Python-versionsberoende: Data från picle är så känsliga för den version av Python som producerades. Inlagda objekt skapade med en version av Python som kanske inte är upplockade med olika versioner.
  2. Ej läsbar: Formatet på pickle är binärt och inte lätt att läsa eller redigera av människor. Kontrakten som är i JSON- eller XML-format kan enkelt ändras.
  3. Stor dataineffektivitet: Stora datamängder kan sakta ner betning och avbetning. Serialisering kan vara mer lämplig för sådana användningsfall.

Slutsats

Även om Python Pickle erbjuder funktioner för objektserialisering, utvecklare som upprätthåller begränsningar, särskilt när de arbetar med olika Python-versioner eller hanterar stora datamängder. Det är viktigt att komma ihåg att alltid överväga de specifika behoven hos din applikation för att avgöra om ickle eller ett alternativ som JSON, XML är lämpligt för serialisering.