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

时间:2013-06-27 11:02:35

标签: 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.

6 个答案:

答案 0 :(得分:11)

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

dict.clear()

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

答案 1 :(得分:2)

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

shelf = shelve.open('shelf')
shelf.clear()
shelf['0'] = list(range(10000))
shelf.close()

更新: dbm.dumbshelve在Windows下用作其基础数据库,包含此TODO项目in its code

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

这解释了不断增长的货架文件问题。

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

  

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

flag='n'的{​​{3}}:

  

始终创建一个新的空数据库,打开以供阅读和编写

如果货架已经打开,则使用情况为:

shelf.close()
shelf = shelve.open('shelf', flag='n')

答案 2 :(得分:0)

这些都不起作用我最终做的是创建一个处理文件删除的函数。

import shelve
import pyperclip
import sys
import os

mcbShelf = shelve.open('mcb')
command = sys.argv[1].lower()

def remove_files():
    mcbShelf.close()
    os.remove('mcb.dat')
    os.remove('mcb.bak')
    os.remove('mcb.dir')

if command == 'save':
    mcbShelf[sys.argv[2]] = pyperclip.paste()
elif command == 'list':
    pyperclip.copy(", ".join(mcbShelf.keys()))
elif command == 'del':
    remove_files()
else:
    pyperclip.copy(mcbShelf[sys.argv[1]])

mcbShelf.close()

答案 3 :(得分:0)

我认为这就是您想要的。

if os.path.isfile(mcbShelf):
   os.remove(mcbShelf)

答案 4 :(得分:0)

您还可以使用for循环从架子上删除内容:

for key in shelf.keys():
            del shelf[key]

答案 5 :(得分:-1)

我认为这就是你要找的东西。

del dict["foo"]