如何在python中将搁置文件清空?

Abh*_*rni 8 python shelve

我创建了一个搁置文件并插入了一个字典数据.现在我想清理搁置文件以重用为干净文件.

import shelve
dict = shelve.open("Sample.db")
# insert some data into sample.db
dict = { "foo" : "bar"}

#Now I want to clean entire shelve file to re-insert the data from begining.
Run Code Online (Sandbox Code Playgroud)

Dim*_*nek 12

Shelve的行为就像字典一样,因此:

dict.clear()
Run Code Online (Sandbox Code Playgroud)

或者,您可以随时删除该文件,并让搁置创建一个新文件.


geo*_*rge 8

dict.clear()是最简单的,应该是有效的,但似乎并没有真正清除架子文件(Python 3.5.2,Windows 7 64位)。例如,.dat每次运行以下代码片段时,架文件大小都会增加,而我希望它始终具有相同的大小:

shelf = shelve.open('shelf')
shelf.clear()
shelf['0'] = list(range(10000))
shelf.close()
Run Code Online (Sandbox Code Playgroud)

更新: 在 Windows 下用作其底层数据库,在其代码中包含此dbm.dumbTODOshelve

  • 回收可用空间(目前,曾经被删除或扩展的项目占用的空间永远不会重复使用)

这解释了日益严重的货架文件问题。


因此dict.clear(),我使用的是shelve.openwith ,而不是flag='n'。引用shelve.open()文档

可选的 flag 参数与 dbm.open() 的 flag 参数具有相同的解释。

以及dbm.open()文档flag='n':​

始终创建一个新的空数据库,打开以进行读写

如果架子已经打开,则用法将是:

shelf.close()
shelf = shelve.open('shelf', flag='n')
Run Code Online (Sandbox Code Playgroud)