Jest tu trochę niedowidzenia. Obserwuj mnie uważnie.
Moduł shelve
jest implementowany na wierzchu anydbm
module. Moduł ten działa jako fasady dla 4 różnych konkretnych implementacji DBM i będzie odebrać pierwszy moduł dostępne podczas tworzenia nowej bazy danych, w następującej kolejności:
dbhash
(przestarzałe ale nadal pierwszą anydbm
wyboru). Jest to proxy dla bsddb
module, .open()
jest naprawdę bsddb.hashopen()
gdbm
, moduł Pythona dla biblioteki GNU DBM, oferując więcej funkcji niż moduł dbm
może zaoferować w przypadku korzystania z tego samego lbrary.
dbm
, moduł proxy używający bibliotek ndbm
, BSD DB i GNU DBM (wybieranych podczas kompilowania Pythona).
dumbdbm
, implementacja czystego Pythona.
Jest to zakres wyborów sprawia, że shelve
pliki wydają się rosnąć dodatkowych rozszerzeń na różnych platformach.
Moduł dumbdbm
jest ten, który dodaje .bak
, .dat
i .dir
rozszerzeń:
Otwarta baza dumbdbm i zwraca obiekt dumbdbm. Argument filename jest nazwą bazową pliku bazy danych (bez żadnych konkretnych rozszerzeń). Po utworzeniu bazy danych dumbdbm tworzone są pliki z rozszerzeniami .dat
i .dir
.
Plik .dir
została przeniesiona do .bak
jako nowe dicts indeksowe są zobowiązani do zmian dokonanych w strukturach danych.
Oznacza to, że inne trzy opcje anydbm
nie są dostępne na platformie.
Inne formaty mogą dawać inne rozszerzenia. Moduł dbm
może używać .dir
, .pag
lub .db
, w zależności od tego, jaka biblioteka była używana dla tego modułu.
To prawdopodobnie program robiący to. Sam moduł [shelve] (http://hg.python.org/cpython/file/e0c0bcd60033/Lib/shelve.py) niczego takiego nie robi. – mata
'" Jako efekt uboczny, rozszerzenie może zostać dodane do nazwy pliku i może zostać utworzony więcej niż jeden plik. "' [(C)] (http://docs.python.org/2/library/shelve. html # shelve.open) To nie odpowiada _why_, chociaż. –