# -*-coding:Latin-1 -* """enregistre et recupere les objets crees depuis une classe dans un dictionnaire""" import cPickle as pickle #lecture/ecriture d'objets dans un fichier #(cpickle remplace pickle, en + rapide) from time import time import os #import pickle def enregistrer(nomObj, obj, fichier = "", remplacer = True): """enregistre un objet. le nom du fichier est le nom de la classe de l'objet""" #on récupère le dictionnaire s'il existe, sinon on le cree #t0 = time() if len(fichier) == 0 : fichier = "{}".format(obj.__class__.__name__) try: with open(fichier, 'rb') as input: dico = pickle.load(input) input.close() except IOError: dico = {} #on ajoute notre nouvel objet (si remplacer est faux, en le renommant s'il existe déja) if dico.has_key(nomObj) and not remplacer: k = 1 while dico.has_key("{}{}".format(nomObj, k)): k += 1 dico["{}{}".format(nomObj,k)]=obj else: dico[nomObj]=obj #on remet le dictionnaire dans le fichier with open(fichier, 'wb') as output: pickle.dump(dico, output, protocol=pickle.HIGHEST_PROTOCOL) output.close() chaine = "{} sauvegarde.".format(nomObj) #print (time() - t0) return chaine def enregistrerUnique(obj, fichier = "", remplacer = True): """comme enregistrer, mais stocke l'objet dans un fichier a part (ex: plateau)""" if len(fichier) == 0 : fichier = "{}".format(obj.__class__.__name__) with open(fichier, 'wb') as output: pickle.dump(obj, output, protocol=pickle.HIGHEST_PROTOCOL) output.close() def charger(fichier, nomObj): """recupere un objet enregistre""" fichier = "{}".format(fichier) #on recupere le dictionnaire retour = None try: with open(fichier, 'rb') as input: dico = pickle.load(input) retour = dico[nomObj] input.close() except IOError: retour = None return retour def chargerUnique(fichier): """comme charger, mais charge un objet stocke dans un fichier a part (ex: plateau)""" fichier = "{}".format(fichier) #on recupere l'objet try: with open(fichier, 'rb') as input: objet = pickle.load(input) input.close() except IOError: objet = None return objet def afficheSvg(fichier): """renvoie le contenu enregistre dans un fichier""" #on récupère le dictionnaire s'il existe try: with open(fichier, 'rb') as input: dico = pickle.load(input) input.close() #on met en forme le retour: #chaine = "" #for clef in dico.keys(): # chaine = chaine + "\n '{}': {}".format(clef,dico[clef]) except IOError: #chaine = "Erreur pour afficher la sauvegarde du fichier {}".format(fichier) dico = {} return dico def supprSvg(fichier, nomObj): """supprime un objet enregistré dans le fichier""" fichier = "{}".format(fichier) try: #on recupere le dictionnaire with open(fichier, 'rb') as input: dico = pickle.load(input) input.close() #on supprime l'enregistrement del dico[nomObj] #on remet le dictionnaire dans le fichier with open(fichier, 'wb') as output: pickle.dump(dico, output, -1) output.close() chaine = "{} supprimé.".format(nomObj) except IOError: chaine = "Erreur: {} non trouve dans le fichier {}.".format(nomObj, fichier) pass return chaine