Как эффективно очистить файл DBM в Python?

В модуле DBM есть команда для удаления значения, хранящегося в ключе.

del d[key]      # delete data stored at key (raises KeyError   # if no such key)

Но я даже не могу выполнить итерацию с этой командой, потому что возникает ошибка времени выполнения (RuntimeError: словарь изменил размер во время итерации).

import dbm
db=dbm.open("file.db","c")
for key in db:
    del db[key]
print(len(db))
db.close()

Есть ли эффективный способ очистить файл DMB сразу? Я использую Python 3.3

1 ответ

Решение
for key in list(db):
    del db[key]

должно сработать.

РЕДАКТИРОВАТЬ: если цель состоит в том, чтобы просто полностью очистить базу данных, вы также можете закрыть базу данных и снова открыть ее с помощью dbm.open('filename', 'n'), 'n' флаг означает "Всегда создавать новую пустую базу данных, открытую для чтения и записи"; Кажется, он перекрывает любой ранее существовавший файл.

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