当我删除货架中的元素时,我还有一些数据。我尝试使用pop
,del
和clear
,但结果是一样的。剩余的数据位于带有dat扩展名的文件中。因此,即使在使用该方法之后,清除dat文件的大小也不是0Ko。
这就是我的尝试:
import shelve
test = shelve.open('test')
test['a']=1
#test.pop('a')
#del test['a']
#test.clear()
test.close()
有没有办法彻底删除货架的数据?
答案 0 :(得分:1)
您可以通过del d[key]
从搁架中删除对象,这是正确的方法。但是当你删除你搁置的所有对象时,它意味着有空的dict。所以你的搁置文件包含腌制的空字典,因此静音大小不是0.
答案 1 :(得分:0)
删除货架中的所有数据与删除文件中的所有数据不同。
显然搁置会创建一个数据库文件(至少对我而言)大约是13k,其中没有数据。请尝试以下方法:
import os
import shelve
with shelve.open('fnord') as db:
db['color'] = 'blue, no yelloowwwww!'
print(list(db.keys()))
print(os.stat('fnord').st_size)
with shelve.open('fnord') as db:
db.clear()
print(list(db.keys()))
print(os.stat('fnord').st_size)
你会发现你的货架没有钥匙,但它的尺寸仍然很大。如果使用十六进制编辑器编辑文件,您将看到有大量数据,但它可能与数据库文件格式有关。