我已经为dict
内置类编写了一个小包装,该类可在第一次访问相应键时立即从cPickle
d文件中加载词典的条目(值) 。当字典被销毁时,所有加载的条目被写回磁盘。Python:测试词典(词典)条目是否已被修改
现在,如果我可以检查是否有任何值已被更改并只写出实际上已经存在的值,那将很方便。 因此,我的问题是:字典是否知道值是否已被更改?还是有一个聪明的方法来透明地实现这一点?
为了完整起见,我附上我使用的代码。它被称为存储文件的路径(键被用作文件名)以及存在文件的键的列表。
import cPickle
class DictDB(dict):
def __init__(self, path, folders):
self.picklepath = path # path to files on disk
self.folders = folders # available folders
self.loaded_folders = {}
def has_key(self, key):
return key in self.folders
def get(self, key):
if not key in self.loaded_folders.keys():
if not key in self.folders:
raise KeyError("Folder "+key+" not available")
# load from disk
self.loaded_folders[key] = cPickle.load(file(self.picklepath + key + ".cpickle2"))
return self.loaded_folders[key]
def __getitem__(self, key):
return self.get(key)
def close(self):
for folder in self.loaded_folders.keys():
# write back
cPickle.dump(self.loaded_folders[folder], file(picklepath + folder + '.cpickle2', 'w'), 2)
def __del__(self):
self.close()
值是否可变? – 2011-03-25 10:33:31
是的,他们几乎总是'dict's本身。 – fuenfundachtzig 2011-03-25 10:39:49