Problème d'unicode

Résolu
Pr.Witherfire Messages postés 84 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -

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. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     

    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
  2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     

    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
  3. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     

    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
  4. Pr.Witherfire Messages postés 84 Statut Membre
     

    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

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

    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. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
       

      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. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention  
       

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

      0
    3. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       

      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. Pr.Witherfire Messages postés 84 Statut Membre > mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention  
       

      ;)

      0
    5. Pr.Witherfire Messages postés 84 Statut Membre > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       

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

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

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


    0