Почему модуль shelve в python иногда создает файлы с разными расширениями?
Я запускаю программу на Python, которая использует shelve
модуль сверху pickle
, После запуска этой программы иногда я получаю один выходной файл как a.data
но в другое время я получаю три выходных файла как a.data.bak
, a.data.dir
а также a.data.dat
,
Это почему?
1 ответ
Здесь есть некоторая косвенность. Следуй за мной внимательно.
shelve
модуль реализован поверх anydbm
модуль. Этот модуль действует как фасад для 4 различных конкретных реализаций DBM и выбирает первый модуль, доступный при создании новой базы данных, в следующем порядке:
dbhash
(устарел, но все еще первыйanydbm
выбор). Это прокси дляbsddb
модуль,.open()
действительноbsddb.hashopen()
gdbm
Модуль Python для библиотеки GNU DBM, предлагающий больше функциональности, чемdbm
Модуль может предложить при использовании с этой же библиотекой.dbm
прокси-модуль, использующий либоndbm
Библиотеки BSD DB и GNU DBM (выбирается при компиляции Python).dumbdbm
, чистая реализация Python.
Именно этот выбор делает shelve
файлы появляются, чтобы расти дополнительные расширения на разных платформах.
dumbdbm
Модуль является тот, который добавляет .bak
, .dat
а также .dir
расширения:
Откройте базу данных dumbdbm и верните объект dumbdbm. Аргумент имени файла - это базовое имя файла базы данных (без каких-либо конкретных расширений). При создании базы данных dumbdbm файлы с
.dat
а также.dir
расширения созданы.
.dir
файл перемещен в .bak
поскольку новые индексные указания фиксируются для изменений, внесенных в структуры данных.
Это означает, что остальные три варианта anydbm
недоступны на вашей платформе.
Другие форматы могут дать вам другие расширения. dbm
модуль может использовать .dir
, .pag
или же .db
в зависимости от того, какая библиотека использовалась для этого модуля.