Sauvegarder toutes les variables

Résolu
Pr.Witherfire Messages postés 84 Statut Membre -  
Pr.Witherfire Messages postés 84 Statut Membre -

Bonjour

Je voudrais sauvegarder toutes les variables d'un programme avec pickle. Je vois comment faire mais au lieu de sauvegarder une variable, une liste ou un dictionnaire, ne serait il pas possible d'avoir une liste ou un dictionnaire avec toutes les variables? Merci


Que Notch soit avec vous

7 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     

    bonjour,

    tu veux également recréer ensuite ces variables?

    0
  2. Pr.Witherfire Messages postés 84 Statut Membre
     

    Oui les réimporter ensuite


    0
  3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     

    Un exemple de programme qui sauve ses variables globales:

    import pickle
    def sauvonstout():
        globs=list(globals())
        saved=[]
        for v in globs:
            d=globals()[v]
            t=(str(type(d)))
            if t != "<class 'module'>" and t !="<class 'function'>":
                saved.append((v,pickle.dumps(d)))
        bytessaved=pickle.dumps(saved)
        fil=open("saved.yg","wb")
        fil.write(bytessaved)
        fil.close()
    a=1234567
    sauvonstout()
    

    et un exemple de récupération:
     

    import pickle
    def restore(pb):
        b=pickle.loads(pb)
        for n,p in b:
            v=pickle.loads(p)
            globals()["yg"+n]=pickle.loads(p)
    fil=open("saved.yg","rb")
    pb=fil.read()
    restore(pb)
    print(yga)
    
    0
  4. Pr.Witherfire Messages postés 84 Statut Membre
     

    Ok merci beaucoup 


    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Pr.Witherfire Messages postés 84 Statut Membre
     

    En fait, j'ai testé et pour la récup, ça me dit

    "C:\Program Files\Python311\python.exe" C:\Users\Pr.Witherfire\PycharmProjects\pickle2\main.py 
    Traceback (most recent call last):
      File "C:\Users\Gwenneg\PycharmProjects\pickle2\main.py", line 8, in <module>
        fil=open("C:\saved.yg","rb")
            ^^^^^^^^^^^^^^^^^^^^^^^^
    FileNotFoundError: [Errno 2] No such file or directory: 'C:\\saved.yg'

    Process finished with exit code 1


    0
  7. tiroutoutou
     

    Bonsoir, il est évident que tu n'as pas dû sauvegarder dans le répertoire où tu souhaites le récupérer, c'est une raison pour laquelle on utilise des chemins absolus par rapport où se situe notre script, de plus yb_ge t'a montré un exemple, il ne faut pas sauvegarder tout ce qu'il y a dans globals ! Car cela enregistrera aussi les modules chargés etc.

    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       

      SI c'est par rapport à l'endroit où se trouve le script, alors c'est relatif, pas absolu.

      0
      1. tiroutoutou > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         

        Non, bien absolu du répertoire courant du script depuis la racine système de façon à pouvoir lancer le script depuis n'importe quel endroit du système de fichiers.

        0
      2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > tiroutoutou
         

        absolu, donc pas par rapport où se situe notre script.

        0
  8. Pr.Witherfire Messages postés 84 Statut Membre
     

    Merci mais comment dois-je faire dans ce cas, si je ne peux pas utiliser global s?

    EDIT : nan c'est bon j'ai compris comment merci.


    0