删除搁架中数据的最干净方法是什么?

问题描述 投票:0回答:3

当我删除架子中的元素时,我还剩下一些数据。我尝试了

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()

有没有办法彻底删除货架的数据?

python shelve
3个回答
5
投票

您可以通过

del d[key]
从搁置中删除对象,这是正确的方法。但是,当您删除架子中的所有对象时,这意味着存在空字典。因此,您的搁置文件包含腌制的空字典,因此 sile 大小不为 0。


0
投票

删除搁置中的所有数据与删除文件中的所有数据不同。

显然 shelve 创建了一个数据库文件(至少对我来说)大约 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)

您会看到您的架子没有钥匙,但它仍然有尺寸。如果您使用十六进制编辑器编辑文件,您会看到有大量数据,但这可能与数据库文件格式有关。


0
投票

del d[key]
.pop(key)
似乎都不起作用。

这非常令人不安,因为第一个是在官方文档中,但也许我做错了什么......

两者似乎都只是从“.dir”文件中删除密钥条目,但“.dat”文件将保留所有数据。 (我这里的 Windows 版本是 3.12)

要解决此问题,您可以使用以下行:

shelf_with_orphaned_data=shelve.open('shelf_with_orphaned_data')
shelf_clean=shelve.open('shelf_clean')
for key in shelf_with_orphaned_data.keys():
    shelf_clean[key]=shelf_with_orphaned_data[key]
© www.soinside.com 2019 - 2024. All rights reserved.