Transformer des variables en dictionnaire sous Python

Fermé
Fabrice - 16 juil. 2020 à 09:52
 Fabrice - 16 juil. 2020 à 15:36
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
A voir également:

3 réponses

jee pee Messages postés 40481 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 27 novembre 2024 9 428
16 juil. 2020 à 11:15
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
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
jee pee Messages postés 40481 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 27 novembre 2024 9 428
16 juil. 2020 à 12:14
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
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
jee pee Messages postés 40481 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 27 novembre 2024 9 428
16 juil. 2020 à 13:25
je n'ai toujours pas saisi ce que tu veux faire ...
0
Fabrice > jee pee Messages postés 40481 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 27 novembre 2024
16 juil. 2020 à 15:07
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
jee pee Messages postés 40481 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 27 novembre 2024 9 428 > Fabrice
16 juil. 2020 à 15:35
je passe mon tour, car n'arrivant toujours pas à entrevoir ce que tu cherches à obtenir.
0
Fabrice > jee pee Messages postés 40481 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 27 novembre 2024
16 juil. 2020 à 15:36
Merci quand même pour ton aide.
0