Я написал небольшую оболочку для встроенного класса dict
, который загружает записи (значения) словаря из файлов cPickle
d при первом обращении к соответствующему ключу.Когда словарь уничтожен, все загруженные записи записываются обратно на диск.
Теперь было бы удобно, если бы я мог проверить, было ли изменено какое-либо из значений, и выписать только те, которые фактически были. Поэтому мой вопрос: знает ли словарь, изменилось ли значение?Или есть разумный способ прозрачно реализовать это?
Для полноты я прилагаю код, который я использую.Он вызывается с путем, в котором хранятся файлы (ключи используются в качестве имен файлов) и со списком ключей, для которых существуют файлы.
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()