J'ai écrit un petit wrapper pour la classe intégrée dict
qui charge les entrées (valeurs) d'un dictionnaire depuis cPickle
d fichiers dès que la clé correspondante est accédée pour la première fois . Lorsque le dictionnaire est détruit, toutes les entrées chargées sont réécrites sur le disque.Python: Test si l'entrée du dictionnaire (dict) a été modifiée
Maintenant, il serait pratique que je vérifie si l'une des valeurs a été modifiée et n'écris que celles qui l'ont été. Ma question est donc la suivante: un dictionnaire sait-il si une valeur a été modifiée? Ou y a-t-il un moyen intelligent d'implémenter cela de manière transparente?
Pour être complet, je joins le code que j'utilise. Il est appelé avec le chemin où les fichiers sont stockés (les clés sont utilisées comme noms de fichiers) et avec une liste de clés pour lesquelles des fichiers existent.
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()
Les valeurs sont-elles mutables? –
Oui, ils sont presque toujours eux-mêmes. – fuenfundachtzig