Transformer des variables en dictionnaire sous Python

Fabrice -  
 Fabrice -
Bonjour,

J'ai référencé plusieurs centaines de variables dans un fichier ayant chacune une valeur.
Ces variables commences toutes par le même modèle : "AB" exemple "AB1= pomme", "AB2= carotte", etc..
Et j'aimerais pouvoir mettre toutes ces variables dans un dictionnaire. Pour pouvoir récupérer les valeurs sans être obligé de rentrer chaque "AB" dans mon dictionnaire.

Avez vous des idées ?

Merci d'avance

Configuration: Windows / Edge 18.17763

3 réponses

  1. jee pee Messages postés 31869 Date d'inscription   Statut Modérateur Dernière intervention   9 974
     
    Bonjour,

    Et où se situe exactement ton problème ?

    Car cela semble simple, une boucle qui lit un fichier texte et qui découpe la ligne en 2 pour initialiser clé et valeur du dictionnaire.
    1
  2. Fabrice
     
    Pour être plus précis, voici mon code :

    import re
    repldict = {'bonjour':'bonsoir'}
                def replfunc(match):
        return repldict[match.group(0)]
    
    regex = re.compile('|'.join(re.escape(x) for x in repldict))
    with open('a.txt') as fin, open('b.txt','w') as fout:
        for line in fin:
            fout.write(regex.sub(replfunc,line))
    

    Il me permet de modifier le texte de mon fichier a.txt sur le fichier b.txt par rapport à ce que j'ai indiqué dans mon dictionnaire.

    Le souci c'est que j'ai déjà un dictionnaire de créer dans un autre fichier ou j'ai associé plusieurs centaines de variables à une valeur (exemple A1 = "bonjour").

    J'aimerais dans un premier temps pouvoir récupérer toutes ces variables, et ensuite pouvoir leur associer une clé (j'ai commencé à regarder au niveau des tuples).

    On aurait par exemple pour la clé "P1" la variable "A1" qui renvoie "bonjour" et pour la clé "P2" la même variable "A1" mais qui revoie "bonsoir".

    J'ai essayé de faire au mieux pour expliquer mon problème mais j'avoue que je bloque un peu..

    Merci pour ton aide.
    1
    1. jee pee Messages postés 31869 Date d'inscription   Statut Modérateur Dernière intervention   9 974
       
      Je n'ai pas beaucoup plus saisi ;-)

      pour charger un dictionnaire depuis un fichier, tu peux avoir quelque chose comme
      dict = {}
      with open("dict0.txt") as fichier:
          for ligne in fichier:
              ligne=ligne.rstrip()
              cleval=ligne.split("=")
              dict[cleval[0]] = cleval[1]
      print(dict)
      0
  3. Fabrice
     
    Merci beaucoup pour ton message ça m'aide déjà beaucoup.

    Le dernier point qui me pose problème c'est qu'un même mot peut être présent plusieurs fois à des endroits différents. Mais j'aimerai que ce mot en fonction de sa position ne devienne pas le même mot.

    Par exemple si le mot "test" est présent 15 fois dans le texte. J'aimerais que la première fois il devienne "bonjour" mais que les autres fois il devienne "bonsoir".

    Voilà l'idée.
    J'ai pensé à des dictionnaires, dans des dictionnaires avec des clés différentes en fonction du dictionnaire. Mais je ne sais pas si cela est réalisable.

    Merci encore.
    0
    1. jee pee Messages postés 31869 Date d'inscription   Statut Modérateur Dernière intervention   9 974
       
      je n'ai toujours pas saisi ce que tu veux faire ...
      0
      1. Fabrice > jee pee Messages postés 31869 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Avec ce code :

        import re
        remplacement_dict = {"A":{'fruit':'pomme','frut':'poulpe'}, "B":{'fruit':'poire','pistache': 'tomate'}}
        
        
        
        with open("a.txt") as fichier, open("b.txt", "w") as nouveaufichier:
         texte = fichier.read()
        # texte = texte.replace(remplacement_dict['A'][0], remplacement_dict['A'][1])
        
        def replfunc(match):
         return remplacement_dict[match.group(0)]
        
        regex = re.compile('|'.join(re.escape(x) for x in remplacement_dict))
        with open('a.txt') as fin, open('b.txt', 'w') as fout:
         for line in fin:
          fout.write(regex.sub(replfunc, line))
        


        J'aimerai pouvoir choisir entre ma liste "A" ou ma liste "B" et remplacer les mots en fonction de cette liste.
        Je pense que ça se joue au niveau de ligne [match.group(0)], mais je ne parviens pas à trouver de solution...
        0
      2. jee pee Messages postés 31869 Date d'inscription   Statut Modérateur Dernière intervention   9 974 > Fabrice
         
        je passe mon tour, car n'arrivant toujours pas à entrevoir ce que tu cherches à obtenir.
        0
      3. Fabrice > jee pee Messages postés 31869 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Merci quand même pour ton aide.
        0