3 回答

TA貢獻1815條經(jīng)驗 獲得超6個贊
dict.clear()是最簡單的方法,應該是有效的,但實際上似乎并沒有清除架子文件(Python 3.5.2,Windows 7 64位)。例如,.dat我每次運行以下代碼段時,文件架文件的大小都會增加,而我希望它始終具有相同的大?。?/p>
shelf = shelve.open('shelf')
shelf.clear()
shelf['0'] = list(range(10000))
shelf.close()
更新: dbm.dumb,它shelve使用與Windows下的底層數(shù)據(jù)庫,包含此TODO項目在其代碼:
回收可用空間(當前,一旦被刪除或擴展的項目占用的空間就永遠不會重復使用)
這解釋了不斷增長的架子文件問題。
因此,而不是dict.clear(),我使用的是shelve.open帶flag='n'。報價shelve.open()文件:
可選的flag參數(shù)與dbm.open()的flag參數(shù)具有相同的解釋。
和dbm.open()文檔為flag='n':
始終創(chuàng)建一個新的空數(shù)據(jù)庫,以供讀取和寫入
如果架子已經(jīng)打開,則用法為:
shelf.close()
shelf = shelve.open('shelf', flag='n')

TA貢獻1725條經(jīng)驗 獲得超8個贊
這些都不是真正有效的方法我最終要做的是創(chuàng)建一個處理文件刪除的功能。
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()
添加回答
舉報