Partage
  • Partager sur Facebook
  • Partager sur Twitter

Convertir une str en dict()

Sujet résolu
    25 octobre 2021 à 16:48:24

    Bonjour, dans mon projet je dois enregistrer des scores contenu dans un dictionnaire

    ex : scores = {"Joueur 1" : 250, "Joueur 2" : 360, "Joueur 3" : 125}

    Que je convertis ensuite en 'str' afin de l'écrire dans un fichier .txt

    Hors, une fois les scores enregistrés, j'aimerai pouvoir les lires depuis le fichier, et convertir la chaîne de caractère "{"Joueur 1" : 250, "Joueur 2" : 360, "Joueur 3" : 125}" en dictionnaire afin de pouvoir la réutiliser plus tard dans mes fonctions qui ne prennent que des dictionnaires en paramètre et l'afficher à l'utilisateur.

    Sauf que malgré mes recherches, je n'ai toujours pas trouvé de méthode permettant de convertir une str en dict.

    J'ai bien essayé cette méthode-là qui semblait être la plus prometteuse :

    Mais elle finit tôt ou tard par me provoquer des erreurs de ce genre-là :

    Que me conseillerez-vous ?

    • Partager sur Facebook
    • Partager sur Twitter
      25 octobre 2021 à 16:52:52

      Soit vous écrivez un fichier texte avec un joueur et son résultat par ligne soit vous utilisez une bibliothèque qui sérialise le dictionnaire comme JSON ou pickle.
      • Partager sur Facebook
      • Partager sur Twitter
        25 octobre 2021 à 17:07:06

        Bonjour,

        Oui, c'est vrai que le module pickle n'est pas mal, il permet d'enregistrer un dictionnaire ou toute autre structure "tels quels"

        sans avoir à découper, convertir en string pour écrire dans un fichier

        A la lecture du fichier, même principe: on récupère directement le dictionnaire, sans avoir à lire les données une par une et les réintégrer

        dans une variable dictionnaire

        import pickle
        
        n = 12
        L1 = [1,2]
        L2 = [3,4]
        dico = {0:'a', 1:'b'}
        
        #ecrire
        with open('pick.txt','wb') as fo:
            pickle.dump(n, fo)
            pickle.dump(L1, fo)
            pickle.dump(L2, fo)
            pickle.dump(dico, fo)
        
        #lire
        with open('pick.txt','rb') as fo:
            n = pickle.load(fo)
            t1 = pickle.load(fo)
            t2 = pickle.load(fo)
            t3 = pickle.load(fo)
        
        print(n)
        print(t1)
        print(t2)
        print(t3, t3[1])



        • Partager sur Facebook
        • Partager sur Twitter
          25 octobre 2021 à 17:42:46

          le json est plus proche (je pense) de ce qu'il recherche
          • Partager sur Facebook
          • Partager sur Twitter
            25 octobre 2021 à 19:47:31

            thelinekioubeur a écrit:

            Ou bien ast.literal_eval

            C'est justement ce que j'avais essayé de montrer dans une des captures d'écrans que j'avais collé dans mon premier message, mais pour je ne sais quelle raison elle ne s'affiche pas, tout comme les deux autres d'ailleurs

            Et du coup, non malheureusement cette méthode finit tôt ou tard par me provoquer tous types d'erreurs non désirées..

            Mais merci beaucoup à Phil_1857, je ne connaissais pas du tout ce module, et après moultes pétages de câble car pickle.dump() ne fonctionne pas en 'r+b' mais qu'en 'wb', j'ai enfin pu achever mon programme !🎉

            Avec un bon usage, je sens que le module 'pickle' va m'être très utile dans le futur 😁 !



            -
            Edité par ValentinClementz 25 octobre 2021 à 21:16:33

            • Partager sur Facebook
            • Partager sur Twitter
              25 octobre 2021 à 21:36:38

              Bonjour. Faites très attention avec pickle puisque cette bibliothèque permet l'exécution arbitraire de code lors du chargement du fichier : ainsi, dans le cadre de votre projet, les utilisateurs ne pourront pas partager leur fichier de scores entre eux sous peine d'exposer leurs machines à une attaque très facile à mettre en œuvre.

              -
              Edité par digammaF 25 octobre 2021 à 21:37:06

              • Partager sur Facebook
              • Partager sur Twitter

              typage structurel ftw

              Convertir une str en dict()

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown