Comment cPickle dump et charger des dictionnaires séparés dans le même fichier?
J'ai un processus qui s'exécute et crée trois dictionnaires: 2 plutôt petit et 1 grand.
Je sais que je peux stocker un dictionnaire comme:
import cPickle as pickle
with open(filename, 'wb') as fp:
pickle.dump(self.fitResults, fp)
Ce que je voudrais faire est de stocker tous les 3 dictionnaires dans le même fichier, avec la capacité de charge dans les trois dictionnaires séparément à un autre moment. Quelque chose comme
with open(filename, 'rb') as fp:
dict1, dict2, dict3 = pickle.load(fp)
Ou encore mieux, il suffit de charger les deux premiers dictionnaires, et de le rendre facultatif si à la charge du tiers (grand). Est-ce possible ou dois-je aller à ce sujet d'une manière complètement différente?
source d'informationauteur JBWhitmore
Vous devez vous connecter pour publier un commentaire.
Sûr, vous avez juste dump chacun séparément, puis de les charger séparément:
assurez-vous de vider le grand sur le dernier de sorte que vous pouvez charger les petits sans chargement de la grande première. J'imagine que vous pourriez même être malin et de stocker le fichier des positions où chaque vidage commence dans un en-tête de toutes sortes, et puis vous pourriez demander à cet emplacement avant le chargement (mais qui commence à devenir un peu plus compliqué).
Je recommande souvent oublié
soit
module qui vous procure un persistante dictionnaire soutenu par Berkley DB fichier ou un fichier dbm (tel que sélectionné paranydbm
). La bd devrait fournir des améliorations de performances (pour votre grand dictionnaire).Exemple d'utilisation:
Comme mentionné icivous pouvez pickle plusieurs objets dans le même fichier, et de les charger (dans le même ordre):
Alors:
Vous pouvez enregistrer vos dictionnaires dans un ordre spécifique, de sorte que lors du chargement, vous avez l'option de sélectionner uniquement le préféré.
Pour l'e.g, si vous stockez des dictionnaires dans l'ordre:
smallDict1
smallDict2
largeDict1
Vous pouvez charger uniquement les petits en paramètre de la plage appropriée pendant le chargement
(Ici
for i in range(2) ...
)