3 回答
TA贡献1815条经验 获得超6个赞
dict.clear()是最简单的方法,应该是有效的,但实际上似乎并没有清除架子文件(Python 3.5.2,Windows 7 64位)。例如,.dat我每次运行以下代码段时,文件架文件的大小都会增加,而我希望它始终具有相同的大小:
shelf = shelve.open('shelf')
shelf.clear()
shelf['0'] = list(range(10000))
shelf.close()
更新: dbm.dumb,它shelve使用与Windows下的底层数据库,包含此TODO项目在其代码:
回收可用空间(当前,一旦被删除或扩展的项目占用的空间就永远不会重复使用)
这解释了不断增长的架子文件问题。
因此,而不是dict.clear(),我使用的是shelve.open带flag='n'。报价shelve.open()文件:
可选的flag参数与dbm.open()的flag参数具有相同的解释。
和dbm.open()文档为flag='n':
始终创建一个新的空数据库,以供读取和写入
如果架子已经打开,则用法为:
shelf.close()
shelf = shelve.open('shelf', flag='n')
TA贡献1725条经验 获得超7个赞
这些都不是真正有效的方法我最终要做的是创建一个处理文件删除的功能。
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()
添加回答
举报