Ich führe ein Python-Programm, das das shelve
-Modul über pickle
verwendet. Nach dem Ausführen dieses Programms bekomme ich manchmal eine Ausgabedatei als a.data
, aber zu anderen Zeiten bekomme ich drei Ausgabedateien als a.data.bak
, a.data.dir
und a.data.dat
.
Warum ist das so?
Hier gibt es einige Indikationen. Folge mir vorsichtig.
Das shelve
-Modul wird über das anydbm
-Modul implementiert. Dieses Modul fungiert als Fassade für 4 verschiedene spezifische DBM-Implementierungen und wählt das erste verfügbare Modul beim Erstellen einer neuen Datenbank in der folgenden Reihenfolge aus:
dbhash
(veraltet, aber immer noch die erste Option anydbm
). Dies ist ein Proxy für das Modul bsddb
, .open()
ist wirklich bsddb.hashopen()
gdbm
, Python-Modul für die GNU DBM-Bibliothek, bietet mehr Funktionalität als das dbm
-Modul Angebot, wenn es mit dieser gleichen Bibliothek verwendet wird. dbm
, ein Proxy-Modul, das entweder die Bibliotheken ndbm
, BSD DB und GNU DBM verwendet (ausgewählt wenn Python kompiliert wird). dumbdbm
, eine reine Python-Implementierung. Es ist dieser Auswahlbereich, der shelve
-Dateien dazu bringt, zusätzliche Erweiterungen auf verschiedenen Plattformen zu erstellen.
Das Modul dumbdbm
fügt die Erweiterungen .bak
, .dat
und .dir
hinzu:
Öffnen Sie eine dumbdbm-Datenbank und geben Sie ein dumbdbm-Objekt zurück. Das Argument filename ist der Basisname der Datenbankdatei (ohne spezifische Erweiterungen). Wenn eine dumbdbm-Datenbank erstellt wird, werden Dateien mit den Erweiterungen
.dat
und.dir
erstellt.
Die .dir
-Datei wird nach .bak
verschoben, da neue Index-Dicts für Änderungen an den Datenstrukturen festgeschrieben werden.
Dies bedeutet, dass die anderen drei Optionen für anydbm
auf Ihrer Plattform nicht verfügbar sind.
Die anderen Formate können Ihnen andere Erweiterungen geben. Das Modul dbm
kann .dir
, .pag
oder .db
verwenden, abhängig davon, welche Bibliothek für dieses Modul verwendet wurde.