dict.clear()
является самым простым и должен быть действительным, но, похоже, на самом деле не очищает полочные файлы (Python 3.5.2, 64-разрядная версия Windows 7). Например, размер файла полки .dat
увеличивается каждый раз, когда я запускаю следующий фрагмент, в то время как я ожидаю, что он всегда будет иметь одинаковый размер:
shelf = shelve.open('shelf')
shelf.clear()
shelf['0'] = list(range(10000))
shelf.close()
Обновление: dbm.dumb
, которое shelve
использует в качестве базовой базы данных под Windows, содержит этот элемент TODO в своем коде:
- освободить свободное пространство (в настоящее время пространство, занимаемое удаленными или расширенными элементами, никогда не используется повторно)
Это объясняет постоянно растущую проблему полочных файлов.
Поэтому вместо dict.clear()
я использую shelve.open
с flag='n'
. Цитирование shelve.open()
документации:
Необязательный параметр флага имеет ту же интерпретацию, что и параметр флага в dbm.open().
И dbm.open()
документация для flag='n'
:
Всегда создавайте новую, пустую базу данных, открытую для чтения и записи.
Если полка уже открыта, использование будет:
shelf.close()
shelf = shelve.open('shelf', flag='n')
person
george
schedule
07.02.2017
dict = { "foo" : "bar"}
должно бытьdict["foo"] = "bar"
. Как и сейчас, он не вставляет данные в объект полки — вместо этого он указываетdict
на новый объект словаря, оставляя полку без изменений. - person george   schedule 07.02.2017