【问题标题】:How to empty DBM file in Python efficiently?如何有效地在 Python 中清空 DBM 文件?
【发布时间】:2013-05-20 10:09:09
【问题描述】:

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

【问题讨论】:

    标签: python python-3.x dbm


    【解决方案1】:
    for key in list(db):
        del db[key]
    

    应该可以。

    编辑:如果目标只是完全清空数据库,您也可以关闭数据库并使用dbm.open('filename', 'n') 重新打开它。 'n' 标志的意思是“总是创建一个新的、空的数据库,打开读写”;它似乎覆盖了任何先前存在的文件。

    【讨论】:

    • 谢谢它的工作!有没有没有迭代的解决方案?使用 OS.REMOVE 删除文件也是一种选择,但 DMB 创建了 2 个文件。没有像 DBM.CLEAR() 之类的聪明方法吗?
    • 我已经尝试使用“n”标志,但它不会覆盖文件。 >>> db=dbm.open("db","c") >>> db["line"]=("somedata") >>> db.close() >>> db=dbm.open(" db","n") >>> data=db["line"] >>> print(data) b'somedata' >>> db.close()
    • 奇怪,它对我有用(32 位 Linux 上的 Python 2.7.3)。
    • 可能是Python版本问题。我在 Windows7 上使用 Python 3.3.2 32 位。如果标志“n”没有覆盖文件,则不需要它,因为可以使用“c”标志创建新文件。
    • 啊,找到了。它真的隐藏在文档中:-( 在 Windows 上,它将使用:docs.python.org/3/library/dbm.html#module-dbm.dumb 将其标志记录为已忽略。如果我是你,我仍然会提交错误报告,说docs.python.org/3/library/dbm.html#dbm.open 的文档应该包括一个警告,或者应该修复dumbdbm。
    猜你喜欢
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    相关资源
    最近更新 更多