Python's Pickles

Pickles i Python er velsmakende i den forstand at de representerer et Python objekt som en streng av bytes. Mange ting kan faktisk gjøres med de byte. Du kan for eksempel lagre dem i en fil eller database, eller overføre dem over et nettverk. 

Den sylte representasjonen av en Python-gjenstand kalles a pickle fil. Den syltefilen kan dermed brukes til forskjellige formål, for eksempel å lagre resultater som skal brukes av et annet Python-program eller skrive sikkerhetskopier. For å få den opprinnelige Python-objektet, gjør du det enkelt unpickle den mengden byte.

Å plukke i Python, vi skal bruke pickle modul. Som nevnt i dokumentasjonen:

Pickle-modulen implementerer binære protokoller for serialisering og de-serialisering av en Python-objektstruktur. "Pickling" er prosessen der et Python-objekthierarki omdannes til en byte-strøm, og "unpickling" er den inverse operasjonen, hvorved en byte-strøm (fra en binærfil eller byteslignende gjenstand) omdannes tilbake til et objekthierarki. Pickling (og unpickling) er alternativt kjent som "serialisering", "marshalling" eller "flatering"; For å unngå forvirring er betegnelsene som benyttes her "pickling" og "unpickling".

De pickle modulen tillater oss å lagre nesten hvilket som helst Python objekt direkte til en fil eller streng uten å måtte foreta konverteringer. Hva i pickle modulen faktisk utfører er det som er såkalt objekt serialisering, det vil si å konvertere objekter til og fra strengene av byte. Objektet som skal syltes, blir serialisert i en strøm av byte som kan skrives til en fil, for eksempel, og gjenopprettes på et senere tidspunkt.

installere pickle

De pickle Modulen leveres faktisk allerede med Python-installasjonen. For å få en liste over installerte moduler, kan du skrive følgende kommando i Python-spørringen: bidrar ( 'moduler').

Så alt du trenger å gjøre for å jobbe med pickle modulen er til importere pickle!

Opprette en Pickle-fil

Fra dette avsnittet vil vi se på noen eksempler på å plukke for å forstå konseptet bedre. La oss begynne med å lage en pickle-fil fra en gjenstand. Vårt objekt her vil være å gjøre liste vi laget i Pythons lister opplæring.

todo = ['skriv blogginnlegg', 'svar på e-post', 'les i en bok']

For å hente vårt listobjekt (å gjøre), kan vi gjøre følgende:

import pickle todo = ['skriv blogginnlegg', 'svar på e-post', 'les i en bok'] pickle_file = fil ('todo.pickle', 'w') pickle.dump (todo, pickle_file)

Legg merke til at vi har laget en importere pickle for å kunne bruke pickle modul. Vi har også laget en pickle-fil for å lagre den sylte objektet i, nemlig todo.pickle. De dump funksjonen skriver en syltet representasjon av å gjøre til det åpne filobjektet pickle_file. Med andre ord, dump funksjon her har to argumenter: objektet til å hakke, hvilket er å gjøre liste og en filobjekt der vi ønsker å skrive pickle, som er todo.pickle.

Unpickling (Gjenoppretting) innpakkede data

Si at vi ønsker å unpickle (gjenopprette) de syltede dataene; i vårt tilfelle er dette den å gjøre liste. For å gjøre det kan vi skrive følgende skript:

import pickle pickle_file = fil ('todo.pickle') todo = pickle.load (pickle_file) print (todo)

Ovennevnte skript vil utgjøre å gjøre liste elementer:

['skriv blogginnlegg', 'svar på e-post', 'les i en bok']

Som nevnt i dokumentasjonen, er belastning (fil) funksjon gjør følgende:

Les en streng fra den åpne filobjektfilen, og tolk den som en pickle-datastrøm, rekonstruere og returnere det opprinnelige objekthierarkiet. Dette tilsvarer Unpickler (fil) .load ().

Pickles som Strings

I avsnittet ovenfor så vi hvordan vi kan skrive / laste pickles til / fra en fil. Dette er imidlertid ikke nødvendig. Jeg mener at hvis vi vil skrive / laste pickles, trenger vi ikke alltid å håndtere filer - vi kan i stedet jobbe med pickles som strenger. Vi kan således gjøre følgende:

import pickle todo = ['skriv blogginnlegg', 'svar på e-post', 'les i en bok'] pickled_data = pickle.dumps (todo) print (pickled_data)

Legg merke til at vi har brukt dumper (med en "s" på slutten) funksjon, som ifølge dokumentasjonen:

Returnerer den sylte representasjonen av objektet som en streng, i stedet for å skrive den til en fil.

For å gjenopprette syltet data ovenfor, kan vi bruke laster (string) funksjon, som følger:

restored_data = pickle.loads (pickled_data)

Ifølge dokumentasjonen, hva laster funksjonen er det det:

Leser et hakkede objekthierarki fra en streng. Tegn i strengen forbi syltet objektets representasjon ignoreres.

Pickling mer enn ett objekt

I eksemplene ovenfor har vi jobbet med å plukke og gjenopprette (lasting) bare ett objekt om gangen. I denne delen skal jeg vise deg hvordan vi kan gjøre det for mer enn ett objekt. Si at vi har følgende objekter:

navn = 'Abder' nettsted = 'http://abder.io' english_french = '' papir ':' papir ',' penn ':' stylo ',' bil ':' voiture ' # ordbok tup = 'abder', 4.0) # tuple

Hvis du vil lære mer om Python-ordbøker og tupler, kan du sjekke følgende veiledninger:

  • En jevn forfriskning på Pythons ordbøker
  • En jevn forfriskning på Python's Tuples

Vi kan bare hente ovenstående objekter ved å kjøre en serie av dump Funksjoner, som følger:

importere pickle name = 'Abder' nettsted = 'http://abder.io' english_french = 'paper': 'papir', 'pen': 'stylo', 'bil': 'voiture' # ordbok tup = 31, 'abder', 4.0) # tuple pickled_file = open ('pickled_file.pickle', 'w') pickle.dump (navn, pickled_file) pickle.dump (nettsted, pickled_file) pickle.dump (english_french, pickled_file) pickle. dump (tup, pickled_file)

Dette vil hente alle de fire objektene i picklefilen pickled_file.pickle.

Det er en annen flott måte å skrive det ovennevnte skriptet på Pickler klasse i pickle modul, som følger:

fra pickle import Pickler navn = 'Abder' nettsted = 'http://abder.io' english_french = '' papir ':' papir ',' penn ':' stylo ',' bil ':' voiture ' # ordbok tup = (31, 'abder', 4.0) # tuple pickled_file = open ('pickled_file.pickle', 'w') p = Pickler (pickled_file) p.dump (navn); p.dump (nettside); p.dump (english_french); p.dump (tup)

For å gjenopprette (laste) de opprinnelige dataene, kan vi bare bruke mer enn en laste funksjon, som følger:

import pickle pickled_file = open ('pickled_file.pickle') navn = pickle.load (pickled_file) nettsted = pickle.load (pickled_file) english_french = pickle.load (pickled_file) tup = pickle.load (pickled_file) print ('Navn:' ) Skriv ut (navn) Skriv ut ('Nettsted:') Skriv ut (Nettsted) Skriv ut ('Engelsk til Fransk:') Skriv ut (engelsk_french) Skriv ut

Utgangen av det ovennevnte skriptet er:

Navn: Abder Hjemmeside: http://abder.io englsh til fransk: 'bil': 'voiture', 'pen': 'stylo', 'papir': 'papir' Tuple data: (31, 'abder' , 4,0)

Som med Pickler klasse, kan vi omskrive det ovennevnte skriptet ved hjelp av Unpickler klasse i pickle modul, som følger:

fra pickle import Unpickler pickled_file = open ('pickled_file.pickle') u = Unpickler (pickled_file) navn = u.load (); nettsted = u.load (); english_french = u.load (); tup = u.load () print ('Navn:') print (navn) print ('Nettsted:') print (nettsted) print ('Engelsk til fransk:') print (english_french) print ('Tuple data:') print (tup)

Vær oppmerksom på at variablene må skrives og leses i samme rekkefølge for å få ønsket utgang. For å unngå problemer her, kan vi bruke en ordliste for å administrere dataene som følger:

importere pickle name = 'Abder' nettsted = 'http://abder.io' english_french = 'paper': 'papir', 'pen': 'stylo', 'bil': 'voiture' # ordbok tup = 31, 'abder', 4.0) # tuple pickled_file = open ('pickled_file.pickle', 'w') data = 'navn': navn, 'nettsted': nettside, 'english_french_dictionary': english_french, 'tuple': tup  pickle.dump (data, pickled_file)

For å gjenopprette (laste) dataene som er syltet inn i det ovennevnte skriptet, kan vi gjøre følgende:

import pickle pickled_file = open ('pickled_file.pickle') data = pickle.load (pickled_file) navn = data ['navn'] nettside = data ['nettsted'] english_french = data ['english_french_dictionary'] tup = data ['tuple Skriv ut ('Navn:') Skriv ut (navn) Skriv ut ('Nettsted:') Skriv ut (Nettsted) Skriv ut ('Engelsk til Fransk:') Print (English_french)

Pickles og Pandas

Vel, dette virker som en interessant kombinasjon. Hvis du lurer på hva Pandas er, kan du lære mer om dem fra introduksjonspandas opplæringen. Den grunnleggende datastrukturen for pandaer er kalt Dataramme, en tabulær datastruktur bestående av bestilte kolonner og rader.

La oss ta et eksempel på Dataramme fra Pandas opplæring:

importer pandas som pd name_age = 'Name': ['Ali', 'Bill', 'David', 'Hany', 'Ibtisam'], 'Age': [32, 55, 20, 43, 30] data_frame = pd.DataFrame (name_age)

For å hente vår Dataramme, vi kan bruke to_pickle () funksjon, som følger:

data_frame.to_pickle ( 'my_panda.pickle')

For å gjenopprette (belaste) syltet Dataramme, vi kan bruke read_pickle () funksjon, som følger:

restore_data_frame = pd.read_pickle ('my_panda.pickle')

Å sette det vi har nevnt i denne delen hele sammen, er dette som skriptet som henter og laster et pandasobjekt, ser ut som:

importer pandas som pd name_age = 'Name': ['Ali', 'Bill', 'David', 'Hany', 'Ibtisam'], 'Age': [32, 55, 20, 43, 30] data_frame = pd.DataFrame (name_age) data_frame.to_pickle ('my_panda.pickle') restore_data_frame = pd.read_pickle ('my_panda.pickle') utskrift (restore_data_frame)

Konklusjon

I denne opplæringen har jeg dekket en interessant modul som heter pickle. Vi har sett hvor enkelt denne modulen gjør at vi kan lagre Python-objekter til forskjellige formål, for eksempel å bruke objektet med et annet Python-program, overføre objektet over et nettverk, lagre objektet til senere bruk etc. Vi kan ganske enkelt plukke Python-objektet , og unpickle (load) den når vi vil gjenopprette det opprinnelige objektet.

Ikke nøl med å se hva vi har tilgjengelig for salg og for studier på markedet, og ikke nøl med å stille spørsmål og gi din verdifulle tilbakemelding ved å bruke feedet under.