Hvordan bruke hyllemodul i Python

Hvordan bruke hyllemodul i Python
Denne artikkelen vil dekke en guide om bruk av "Shelve" -modulen i Python. Hyllemodulen kan brukes til å lagre Python-objekter som nøkkelverdipar i en ekstern fil. Disse nøkkelverdiparene er serialisert i byte-strømmer, et format som Python forstår. Så du kan lagre Python -objekter i en fil og få dem tilbake igjen i et program ved å lese filen der serialiserte data har blitt lagret tidligere. Alle kodeprøver i denne artikkelen er testet med Python versjon 3.9.7 på Ubuntu 21.10.

Hyll og sylteagurk

Hyllemodulen bruker Pythons “Pickle” -modul under for å serialisere dataene. Hovedforskjellen mellom hylle- og pickle -moduler er at hyllen kan brukes til å knytte serialiserte objekter med nøkler. Disse nøklene kan brukes som identifikatorer i koden din, og du kan henvise til dem for å få det serialiserte objektet. Pickle derimot gir ikke en innfødt måte å lagre serialiserte data i nøkkelverdipar, uten noen løsninger eller tilpasset kode. Dermed er Shelve mer en bekvemmelighetsmodul for enkel serialisering av Python -objekter og kan brukes til å lage enkle databaser som inneholder serialiserte data.

Grunnleggende bruk og syntaks

Du kan åpne en databasefil ved å bruke den "åpne" metoden som er tilgjengelig i hyllemodulen. Denne metoden kan brukes som en kontekstbehandler slik at den filen er riktig lukket når metodesamtalen er ferdig. Her er en kodeeksempel:

Importer hyll
med hylla.Åpne ('Test.db ', "w") som db:
db ['epler'] = 50
db ['appelsiner'] = 80

Den første uttalelsen importerer hovedhyllemodulen til Python -programmet. Deretter bruker du "med hyllen.Åpen "metodeanrop og kontekstbehandler,“ Test.DB ”-filen åpnes som“ DB ”i skrivemodus. Filen kan ha noe navn og utvidelse. De to siste uttalelsene brukes til å lage to nye nøkkelverdipar ved hjelp av Python Dictionary-lignende syntaks. Disse nøkkelverdiparene lagres deretter i testen.DB -fil i serialisert form.

Etter å ha utført kodeprøven ovenfor, hvis du åpner testen.DB -fil I en tekstredigerer, bør du se noen data som ligner på dette:

Som du kan se, er ikke dataene som er lagret i filen i menneskelig lesbar form. Imidlertid, hvis du åpner denne filen ved hjelp av hyllen, vil du kunne hente nøkkelverdipar i Python-programmet ditt. Her er en kodeeksempel:

Importer hyll
med hylla.Åpne ('Test.DB ') som DB:
trykk (db ['epler'])
Print (DB ['appelsiner'])

Nøkkelverdipar serialisert etter hylla er identiske med et ordbokstypeobjekt i Python, og de støtter alle metodene sine. Så du kan henvise til objekter ved å levere en nøkkel i firkantede seler. I de to siste utsagnene blir verdien av begge tastene hentet ved hjelp av ordboklignende syntaks. Etter å ha kjørt ovennevnte kodeprøve, bør du få følgende utdata:

50
80

Merk at Python automatisk velger et passende databasefilformat for Shelve, og tar hensyn til operativsystemet som programmet blir utført. Det påvirker imidlertid ikke bruken av hyllemodulen og funksjonaliteten til objekter serialisert ved hjelp av den.

Få alle nøkkelverdipar fra en databasefil opprettet ved hjelp av hylla

For å få alle nøkler og verdipar, må du kalle "nøkler" og "verdier" -metoder, akkurat som du ville gjort med et ordbokstypeobjekt i Python. Her er en kodeeksempel:

Importer hyll
med hylla.Åpne ('Test.DB ') som DB:
elementer = liste (DB.elementer ())
Keys = liste (DB.Keys ())
Verdier = liste (DB.verdier ())
trykk (varer)
Print (Keys)
trykk (verdier)

Som du kan se i ovennevnte kodeprøve, er "elementer", "nøkler" og "verdier" metoder blitt kalt for å hente nøkler og verdier. Disse nøklene og verdiene er objekter av hyllinger, så du må konvertere dem til en liste eller andre iterable for å få sine faktiske verdier. Etter å ha kjørt ovennevnte kodeprøve, bør du få følgende utdata:

[('Apples', 50), ('appelsiner', 80)]
['epler', 'appelsiner']
[50, 80]

Merk at hvis du bare vil iterere over nøkler og verdier, kan du gjøre det ved hjelp av Loop eller noen annen uttalelse uten å konvertere nøkler og verdier til en Python -liste eller noe annet slikt objekt.

Du kan serialisere funksjoner og klasser ved hjelp av hylla

Du kan serialisere et hvilket som helst Python -objekt ved hjelp av hyllemodul, til og med funksjoner og klasser. Her er et eksempel som illustrerer serialisering av en funksjon, henter den tilbake og ringer den til å gjøre noen beregninger.

Importer hyll
def square (tall):
Returnummer * Nummer
med hylla.Åpne ('Test.db ', "w") som db:
db ['square_function'] = firkant
med hylla.Åpne ('Test.DB ') som DB:
firkant = db ['Square_function']
trykk (firkant (5))

En ny funksjon kalt “Square” er blitt definert. Det beregner kvadratet på et tall og returnerer det. Deretter blir denne funksjonen serialisert ved hjelp av hylla og lagres i testen.DB -databasefil. Den serialiserte funksjonen blir deretter lest tilbake i den "firkantede" variabelen. Siden kvadratvariabelen nå er en forekomst av den firkantede funksjonen som er definert tidligere, kan du ringe den for å beregne kvadratet på et tall.

Etter å ha kjørt ovennevnte kodeprøve, bør du få følgende utdata:

25

Konklusjon

Serialisering er en prosess med å lagre Python -objekter i en databasefil slik at de kan hentes i en form som er nøyaktig det samme som hvordan de opprinnelig ble definert før serialisering. Dette lar deg lagre komplekse Python -objekter i strukturert format. Hyllemodulen bruker Pickle -modulen for å lagre og hente serialiserte Python -objekter. Den bruker nøkkelverdi-parstruktur for å håndtere serialiserte objekter, noe som gjør det lettere å administrere dem.