Problème d'unicode

Résolu

Bonjour

J'ai un problème pour la restitution d'un .yg

"C:\Program Files\Python311\python.exe" C:\Users\Gwenneg\PycharmProjects\pickle2\main.py 
  File "C:\Users\Gwenneg\PycharmProjects\pickle2\main.py", line 7
    fil=open("C:\Users\Gwenneg\PycharmProjects\pythonProject1\saved.yg","rb")
                                                                       ^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

Process finished with exit code 1


Merci


Que Notch soit avec vous

6 réponses

  1. Bonjour,

    Ce n'est comme cela que l'on utilise pickle: on ne fait pas pickle.dump(), puis ouverture et écriture dans

    le fichier, on dumpe directement:

    	with open('saved.yg','wb') as fo:
    		pickle.dump(saved, fo)
    

    Et pour la lecture:

    	with open('saved.yg','rb') as fo:
    		saved = pickle.load(fo)
    1
    1. Modérateur

      Bonjour,

      Par rapport à ta réponse #2, je n'ai jamais vu d'extension yg (pkl me paraît plus naturel), mais pourquoi pas. 

      Ensuite, en complément à la réponse de Phil_1857 #3, voici comment tu peux faire.

      Code :

      import pickle
      from types import ModuleType
      
      def save_all(filename: str):
          with open(filename, "wb") as f:
              g = {
                  k : v
                  for (k, v) in globals().items()
                  if (
                      not (k.startswith("__") and k.endswith("__")) and
                      not callable(v) and
                      not isinstance(v, ModuleType)
                  )
              }
              pickle.dump(g, f)
      
      def load_all(filename: str):
          with open(filename, "rb") as f:
              for (k, v) in pickle.load(f).items():
                  globals()[k] = v
      
      # Prepare the pickle
      filename = "toto.pkl"
      a = 1234567
      print(f"saving {filename}")
      save_all("toto.pkl")
      
      # Delete the global variable "a"
      print("del a")
      del a
      try:
          print(f"a = {a}")
      except Exception as e:
          print(e)
      
      # Load the pickle
      print(f"loading {filename}")
      load_all(filename)
      print(f"a = {a}")
      

      Résultat

      saving toto.pkl
      del a
      name 'a' is not defined
      loading toto.pkl
      a = 1234567

      Bonne chance

      1
      1. Modérateur

        Bonjour,

        La question est trop vague.

        1. Qu'est-ce qu'un fichier yg ?
        2. Comment l'as tu créé ?
        3. Comment tentes-tu de l'ouvrir ?

        Bonne chance

        0
        1. Bonjour

          1. C'est une extension de fichier binaire

          2. Je l'ai fait grâce au code suivant :

          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()

          3. Grâce au code suivant :

          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
          1. Ok merci. Pour le fichier yg, moi non plus, j'aimais vu. J'ai fait mon code à base d'un réponse de yg_be. Je me demande donc si ce n'est pas un format qu'il a créé... Merci


            0
            1. Modérateur

              Haha c'est peut être une manière de signer son œuvre, il faudra lui demander ;-) Mais bon ".pkl" me paraît plus parlant ;-)

              0
            2. Contributeur
              @mamiemando

              En manque d'inspiration, j'ai pris le premier nom qui me venait à l'esprit.

              0
            3. Modérateur
              @yg_be

              Le plus drôle, c'est que quand j'ai vu l'extension, je me suis dit : "yg, yg... mmmh à part yg_be ça ne me dit rien du tout..." :D

              0
            4. @yg_be

              Cool. Je suis pas calé la dessus, mais ça voudrait dire que tu peux créer n'importe quand ton propre format?!

              0
          2. Oui n'empêche que ça avait l'air de marcher... :)


            0