Как эффективно очистить файл 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'
флаг означает "Всегда создавать новую пустую базу данных, открытую для чтения и записи"; Кажется, он перекрывает любой ранее существовавший файл.