Jak używać modułu Shelve w Python

Jak używać modułu Shelve w Python
W tym artykule obejmie przewodnik po użyciu modułu „Shelve” w Python. Moduł Shelve może być używany do przechowywania obiektów Pythona jako parach kluczowych w pliku zewnętrznym. Te pary wartości kluczowej są serializowane w strumieniach bajtów, format, który rozumie Python. Możesz zapisać obiekty Pythona na pliku i odzyskać je ponownie w programie, czytając plik, w którym dane serializowane były wcześniej przechowywane. Wszystkie próbki kodu w tym artykule są testowane z Python wersja 3.9.7 na Ubuntu 21.10.

Shelve i marynata

Moduł Shelve używa modułu „marynowania” Pythona pod spodem do serializacji danych. Główną różnicą między modułami półprzewodnikami i marynatami jest to, że półki można użyć do powiązania obiektów serializowanych z klawiszami. Klawisze te mogą być używane jako identyfikatory w twoim kodzie i możesz odwołać się do nich, aby uzyskać serializowany obiekt. Z drugiej strony marynata nie zapewnia natywnego sposobu przechowywania serializowanych danych w parach kluczowych, bez żadnych obejść lub kodu niestandardowego. Zatem Shelve jest bardziej modułem wygody dla łatwej serializacji obiektów Python i może być używana do tworzenia prostych baz danych zawierających serializowane dane.

Podstawowe użycie i składnia

Możesz otworzyć plik bazy danych za pomocą metody „otwórz” dostępnej w module Shelve. Ta metoda może być używana jako menedżer kontekstowy, aby ten plik został poprawnie zamknięty, gdy połączenie metody zakończy się. Oto próbka kodu:

Importuj półki
z półką.otwarte („test.db ', „w”) jako db:
db [„jabłka”] = 50
db ['pomarańcze'] = 80

Pierwsze oświadczenie importuje główny moduł Shelve do programu Python. Następnie używając „z Shelve.Otwórz ”Metod Call and Context Manager„ Testuj.plik db ”jest otwarty jako„ db ”w trybie zapisu. Plik może mieć dowolną nazwę i rozszerzenie. Dwa ostatnie instrukcje służą do utworzenia dwóch nowych par kluczowych przy użyciu składni przypominającej Python Słownik. Te pary wartości kluczowej są następnie przechowywane w teście.plik db w serialu.

Po wykonaniu powyższej próbki kodu, jeśli otworzysz test.plik DB w edytorze tekstu należy zobaczyć niektóre dane podobne do tego:

Jak widać, dane przechowywane w pliku nie są w formie czytelnej ludzkiej. Jeśli jednak otworzysz ten plik za pomocą Shelve, będziesz mógł pobrać pary wartości kluczowej w programie Python. Oto próbka kodu:

Importuj półki
z półką.otwarte („test.db ') jako db:
Drukuj (db [„jabłka”])
print (db ['pomarańcze'])

Pary wartości kluczowej serializowane według półki są identyczne z obiektem typu słownika w Pythonie i popierają wszystkie swoje metody. Dzięki czemu możesz odwołać się do obiektów, dostarczając klucz do kwadratowych aparatów ortodontycznych. W dwóch ostatnich instrukcjach wartość obu klawiszy jest pobierana za pomocą składni podobnej do słownika. Po uruchomieniu powyższej próbki kodu należy uzyskać następujące dane wyjściowe:

50
80

Zauważ, że Python automatycznie wybiera odpowiedni format pliku bazy danych dla Shelve, biorąc pod uwagę system operacyjny, z którego program jest wykonywany. Nie wpływa to jednak na użycie modułu półki i funkcjonalności obiektów serializowanych za pomocą go.

Uzyskanie wszystkich par kluczowych z pliku bazy danych utworzonych za pomocą Shelve

Aby uzyskać wszystkie klucze i pary wartości, musisz wywołać metody „klawisze” i „wartości”, tak jak zrobiłby to z obiektem typu słownika w Python. Oto próbka kodu:

Importuj półki
z półką.otwarte („test.db ') jako db:
pozycje = lista (db.rzeczy())
Klucze = lista (db.Klucze())
wartości = lista (db.wartości ())
Drukuj (elementy)
Drukuj (klucze)
Drukuj (wartości)

Jak widać w powyższej próbce kodu, wywołano metody „elementy”, „klawisze” i „wartości” w celu pobrania klawiszy i wartości. Te klucze i wartości są obiektami typu Shelve, więc musisz przekonwertować je na listę lub inne możliwe do uzyskania ich rzeczywistych wartości. Po uruchomieniu powyższej próbki kodu należy uzyskać następujące dane wyjściowe:

[(„jabłka”, 50), („pomarańcze”, 80)]
[„jabłka”, „pomarańcze”]
[50, 80]

Zauważ, że jeśli chcesz po prostu iterować klawisze i wartości, możesz to zrobić za pomocą pętli lub innych instrukcji bez konwersji kluczy i wartości na listę Pythona lub innego takiego obiektu.

Możesz serializować funkcje i klasy za pomocą półki

Możesz serializować dowolny obiekt Python za pomocą modułu Shelve, nawet funkcji i klas. Oto przykład ilustrujący serializację funkcji, odzyskiwanie jej z powrotem, a następnie wzywając ją do wykonania niektórych obliczeń.

Importuj półki
def Square (liczba):
Numer zwroty *
z półką.otwarte („test.db ', „w”) jako db:
db ['square_function'] = kwadrat
z półką.otwarte („test.db ') jako db:
Square = db ['square_function']
Drukuj (kwadrat (5))

Zdefiniowano nową funkcję o nazwie „kwadrat”. Oblicza kwadrat liczby i zwraca go. Następnie ta funkcja jest serializowana przy użyciu półki i przechowywana w teście.plik bazy danych db. Funkcja serializowana jest następnie odczytywana z powrotem do zmiennej „kwadratowej”. Ponieważ zmienna kwadratowa jest teraz instancją funkcji kwadratowej zdefiniowanej wcześniej, możesz nazwać ją obliczeniem kwadratu liczby.

Po uruchomieniu powyższej próbki kodu należy uzyskać następujące dane wyjściowe:

25

Wniosek

Serializacja to proces przechowywania obiektów Pythona w pliku bazy danych, aby można je było odzyskać w formie dokładnie tak samo, jak pierwotnie zdefiniowano je przed serializacją. To pozwala przechowywać złożone obiekty Pythona w formacie strukturalnym. Moduł Shelve wykorzystuje moduł marynaty do przechowywania i pobierania serializowanych obiektów Pythona. Wykorzystuje strukturę pary wartości kluczowej do obsługi serializowanych obiektów, ułatwiając nimi zarządzanie.