Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente | |||
sauve_recup_objets [2008/04/12 08:45] tyrtamos |
sauve_recup_objets [2009/10/06 08:57] (Version actuelle) tyrtamos |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== Sauvegarder et recharger des objets Python de base ====== | ====== Sauvegarder et recharger des objets Python de base ====== | ||
+ | |||
+ | (modifié le 6/10/2009: ajout d'une 3ème méthode) | ||
Quelques essais de sauvegarde et de récupération d' | Quelques essais de sauvegarde et de récupération d' | ||
Ligne 44: | Ligne 46: | ||
import shelve | import shelve | ||
+ | # sauvegarde des objets | ||
d = shelve.open(' | d = shelve.open(' | ||
- | |||
- | # sauvegarde des objets | ||
d[' | d[' | ||
d[' | d[' | ||
Ligne 59: | Ligne 60: | ||
d.close() | d.close() | ||
+ | # récupération des objets sauvegardés | ||
d = shelve.open(' | d = shelve.open(' | ||
- | |||
- | # récupération des objets sauvegardés | ||
R0 = d[' | R0 = d[' | ||
R1 = d[' | R1 = d[' | ||
Ligne 90: | Ligne 90: | ||
Résultat de l' | Résultat de l' | ||
- | < | + | < |
objets a sauvegarder: | objets a sauvegarder: | ||
True <type ' | True <type ' | ||
Ligne 201: | Ligne 201: | ||
Ce qui donne comme résultat d' | Ce qui donne comme résultat d' | ||
- | < | + | < |
objets a sauvegarder: | objets a sauvegarder: | ||
True <type ' | True <type ' | ||
Ligne 228: | Ligne 228: | ||
Vous voyez que les objets récupérés sont identiques en valeur et en type avec les données de départ. Il sont aussi identiques aux résultats de shelve, à part que le fichier de sauvegarde est consultable et éditable avec un simple éditeur de texte. | Vous voyez que les objets récupérés sont identiques en valeur et en type avec les données de départ. Il sont aussi identiques aux résultats de shelve, à part que le fichier de sauvegarde est consultable et éditable avec un simple éditeur de texte. | ||
+ | |||
+ | ===== Recharge, manipulation et sauvegarde d'un dictionnaire de variables ===== | ||
+ | |||
+ | On va utiliser la méthode précédente, | ||
+ | |||
+ | Cette classe, appelée ici Dicovar, est dérivée par héritage d'un type dict. On pourra donc bénéficier de toutes les méthodes du type dict (dictionnaire). | ||
+ | |||
+ | Comme pour la méthode précédente, | ||
+ | |||
+ | A quoi peut bien servir un code pour gérer un dictionnaire de variables? Voici un exemple: je voulais créer une calculatrice qui exploite des variables dans les expressions. Mais il s' | ||
+ | |||
+ | <code python> | ||
+ | D = {' | ||
+ | print eval(" | ||
+ | 6 | ||
+ | </ | ||
+ | |||
+ | Vous voyez que le dictionnaire D a été exploité dans le calcul par eval! On pourra donc, avec le code qui suit, non seulement assurer un suivi des variables d'un calcul d' | ||
+ | |||
+ | Voilà le code: | ||
+ | |||
+ | <code python> | ||
+ | import os | ||
+ | |||
+ | class Dicovar(dict): | ||
+ | def __init__(self, | ||
+ | self.nf = nf | ||
+ | try: | ||
+ | f = open(nf, ' | ||
+ | dict.__init__(self, | ||
+ | f.close() | ||
+ | except: | ||
+ | dict.__init__(self, | ||
+ | |||
+ | def enregistre(self): | ||
+ | f = open(self.nf, | ||
+ | f.write(repr(self) + os.linesep) | ||
+ | f.close() | ||
+ | </ | ||
+ | |||
+ | L' | ||
+ | |||
+ | A l' | ||
+ | |||
+ | * En cas d' | ||
+ | |||
+ | * S'il n'y a pas d' | ||
+ | |||
+ | A la fin, pour enregistrer le dictionnaire en cours sur disque, il suffit d' | ||
+ | |||
+ | Entre ces deux opérations (initialisation et enregistrement), | ||
+ | |||
+ | Exemples: | ||
+ | |||
+ | <code python> | ||
+ | # objets a sauvegarder sur disque et à recuperer | ||
+ | L0=True | ||
+ | L1=123 | ||
+ | L2=456L | ||
+ | L3=1.789e5 | ||
+ | L4=complex(1, | ||
+ | L5=" | ||
+ | L6=u" | ||
+ | L7=[L0, | ||
+ | L8=(L0, | ||
+ | L9={' | ||
+ | |||
+ | print " | ||
+ | print L0, type(L0) | ||
+ | print L1, type(L1) | ||
+ | print L2, type(L2) | ||
+ | print L3, type(L3) | ||
+ | print L4, type(L4) | ||
+ | print L5, type(L5) | ||
+ | print L6, type(L6) | ||
+ | print L7, type(L7) | ||
+ | print L8, type(L8) | ||
+ | print L9, type(L9) | ||
+ | |||
+ | |||
+ | ######################################################################### | ||
+ | # Sauvegarde et récupération d' | ||
+ | |||
+ | # sauvegarde des objets | ||
+ | d = Dicovar(' | ||
+ | d[' | ||
+ | d[' | ||
+ | d[' | ||
+ | d[' | ||
+ | d[' | ||
+ | d[' | ||
+ | d[' | ||
+ | d[' | ||
+ | d[' | ||
+ | d[' | ||
+ | d.enregistre() | ||
+ | |||
+ | # récupération des objets sauvegardés | ||
+ | d = Dicovar(' | ||
+ | R0 = d[' | ||
+ | R1 = d[' | ||
+ | R2 = d[' | ||
+ | R3 = d[' | ||
+ | R4 = d[' | ||
+ | R5 = d[' | ||
+ | R6 = d[' | ||
+ | R7 = d[' | ||
+ | R8 = d[' | ||
+ | R9 = d[' | ||
+ | d.enregistre() | ||
+ | |||
+ | print " | ||
+ | print R0, type(R0) | ||
+ | print R1, type(R1) | ||
+ | print R2, type(R2) | ||
+ | print R3, type(R3) | ||
+ | print R4, type(R4) | ||
+ | print R5, type(R5) | ||
+ | print R6, type(R6) | ||
+ | print R7, type(R7) | ||
+ | print R8, type(R8) | ||
+ | print R9, type(R9) | ||
+ | |||
+ | </ | ||
+ | |||
+ | Ce qui affiche: | ||
+ | |||
+ | < | ||
+ | objets a sauvegarder: | ||
+ | True <type ' | ||
+ | 123 <type ' | ||
+ | 456 <type ' | ||
+ | 178900.0 <type ' | ||
+ | (1+2j) <type ' | ||
+ | ABC <type ' | ||
+ | DEF <type ' | ||
+ | [True, 123, 456L, 178900.0, (1+2j), ' | ||
+ | (True, 123, 456L, 178900.0, (1+2j), ' | ||
+ | {' | ||
+ | |||
+ | objets recuperes par Dicovar | ||
+ | True <type ' | ||
+ | 123 <type ' | ||
+ | 456 <type ' | ||
+ | 178900.0 <type ' | ||
+ | (1+2j) <type ' | ||
+ | ABC <type ' | ||
+ | DEF <type ' | ||
+ | [True, 123, 456L, 178900.0, (1+2j), ' | ||
+ | (True, 123, 456L, 178900.0, (1+2j), ' | ||
+ | {' | ||
+ | </ | ||
+ | |||
+ | Comme dans les méthodes précédentes, | ||
+ | |||
+ | Petits compléments: | ||
+ | |||
+ | Remise à " | ||
+ | |||
+ | <code python> | ||
+ | s = Dicovar(' | ||
+ | s.clear() | ||
+ | s.enregistre() | ||
+ | </ | ||
+ | |||
+ | Réinitialisation en cours d' | ||
+ | |||
+ | <code python> | ||
+ | s = Dicovar(' | ||
+ | s.clear() | ||
+ | s.update(D) | ||
+ | s.enregistre() | ||
+ | </ | ||
+ | |||
+ | Etc... | ||
+ | |||
+ | Amusez-vous bien! | ||
+ | | ||
< | < |