C'è un po 'di indirezione qui. Seguimi attentamente.
Il modulo shelve
è implementato su anydbm
module. Questo modulo agisce come una facciata per 4 diverse implementazioni DBM specifici, e si riprenderà il primo modulo disponibile quando si crea un nuovo database, nel seguente ordine:
dbhash
(deprecato, ma ancora la prima scelta anydbm
). Questo è un proxy per il bsddb
module, .open()
è davvero bsddb.hashopen()
gdbm
, modulo Python per la libreria GNU DBM, che offre più funzionalità rispetto al modulo dbm
può offrire quando viene utilizzato con la stessa lbrary.
dbm
, un modulo proxy che utilizza le librerie ndbm
, BSD DB e GNU DBM (scelto quando Python è compilato).
dumbdbm
, un'implementazione pure-python.
È questa gamma di scelte che fa apparire i file shelve
estensioni extra su piattaforme diverse.
Il modulo dumbdbm
è quella che aggiunge le .bak
, .dat
e .dir
estensioni:
Aprire un database dumbdbm e restituisce un oggetto dumbdbm. L'argomento nomefile è il nome di base del file di database (senza estensioni specifiche). Quando viene creato un database dumbdbm, vengono creati i file con estensioni .dat
e .dir
.
Il file .dir
viene spostato a .bak
come nuovi dicts indice sono impegnati per le modifiche apportate alle strutture di dati.
significa che il altre tre opzioni per anydbm
non sono disponibili sulla vostra piattaforma.
Gli altri formati potrebbero fornire altre estensioni. Il modulo dbm
può utilizzare .dir
, .pag
o .db
, a seconda della libreria utilizzata per quel modulo.
fonte
2013-04-26 07:45:02
Probabilmente è il programma che lo fa. Il modulo [shelve] (http://hg.python.org/cpython/file/e0c0bcd60033/Lib/shelve.py) non fa nulla del genere. – mata
'" Come effetto collaterale, un'estensione può essere aggiunta al nome del file e più di un file può essere creato. "' [(C)] (http://docs.python.org/2/library/shelve. html # shelve.open) Questo non risponde _why_, però. –