Почему модуль shelve в python иногда создает файлы с разными расширениями?

Я запускаю программу на Python, которая использует shelve модуль сверху pickle, После запуска этой программы иногда я получаю один выходной файл как a.data но в другое время я получаю три выходных файла как a.data.bak, a.data.dir а также a.data.dat,

Это почему?

1 ответ

Решение

Здесь есть некоторая косвенность. Следуй за мной внимательно.

shelve модуль реализован поверх anydbm модуль. Этот модуль действует как фасад для 4 различных конкретных реализаций DBM и выбирает первый модуль, доступный при создании новой базы данных, в следующем порядке:

  1. dbhash (устарел, но все еще первый anydbm выбор). Это прокси для bsddb модуль, .open() действительно bsddb.hashopen()
  2. gdbm Модуль Python для библиотеки GNU DBM, предлагающий больше функциональности, чем dbm Модуль может предложить при использовании с этой же библиотекой.
  3. dbm прокси-модуль, использующий либо ndbm Библиотеки BSD DB и GNU DBM (выбирается при компиляции Python).
  4. dumbdbm, чистая реализация Python.

Именно этот выбор делает shelve файлы появляются, чтобы расти дополнительные расширения на разных платформах.

dumbdbm Модуль является тот, который добавляет .bak, .dat а также .dir расширения:

Откройте базу данных dumbdbm и верните объект dumbdbm. Аргумент имени файла - это базовое имя файла базы данных (без каких-либо конкретных расширений). При создании базы данных dumbdbm файлы с .dat а также .dir расширения созданы.

.dir файл перемещен в .bak поскольку новые индексные указания фиксируются для изменений, внесенных в структуры данных.

Это означает, что остальные три варианта anydbm недоступны на вашей платформе.

Другие форматы могут дать вам другие расширения. dbm модуль может использовать .dir, .pag или же .db в зависимости от того, какая библиотека использовалась для этого модуля.

Другие вопросы по тегам