Problème code dict
Résolu
William
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
A voir également:
- Problème code dict
- Code ascii - Guide
- Code puk bloqué - Guide
- Code activation windows 10 - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code blocks - Télécharger - Langages
3 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
peux-tu partager un code complet que nous pouvons tester?
peux-tu partager un code complet que nous pouvons tester?
Bonjour et merci pour votre réponse.
Pour executer le code que voici, j'insérai mon code dans un fichier nommé par exemple "conversion.py" puis dans un dossier enfant "toto" je créais un fichier nommé a.txt
Ensuite en tapant la commande depuis le dossier ou se trouve mon code : "python conversion.py toto/"
J'avais les modifications du sous_dict indiquées.
Code complet :
Pour executer le code que voici, j'insérai mon code dans un fichier nommé par exemple "conversion.py" puis dans un dossier enfant "toto" je créais un fichier nommé a.txt
Ensuite en tapant la commande depuis le dossier ou se trouve mon code : "python conversion.py toto/"
J'avais les modifications du sous_dict indiquées.
Code complet :
import re import os import sys dict = {'Dict1': {"Pomme": "Poire"}, 'Dict2': {"Banane": "Tomate"}, 'Dict3': {"fleur": "Arbre"},} def find_END(line): if re.search(r'\bFIN\b', line): return True else: return False def replacer_factory1(dictionary): def replacing(match): if len(dictionary) > 0: word = match.group() exchange = dictionary.get(word, word) return exchange else: return "" return replacing def replacing1(text, dict): regex_patt_list = r'\b(?:' + '|'.join(dict) + r')\b' replacer = replacer_factory1(dict) return re.sub(regex_patt_list, replacer, text) def folder(input,output): with open(sys.argv[1] + input) as fin: with open(sys.argv[1] + output, 'w') as fout: key = 0 sous_dict = dict["Dict3"] cache_mem = [] for line in fin: cache_mem.append(line) if find_END(line): #print(cache_mem) for x in cache_mem: if x.strip() in dict.keys(): key = x.strip() sous_dict = dict[key] fout.write(replacing1(x,sous_dict)) cache_mem = [] print(sys.argv[0]) result = os.listdir(sys.argv[1]) for x in result: folder(x, x + "V") print(result)
Après si vous avez une autre option à me proposer je suis preneur.
L'idée étant que chaque partie du texte est précédé d'un mot (dans mon exemple dict quelque chose) et pour chaque partie différente on applique un changement de mot.
Pour faire simple on applique le changement de mot du dictionnaire en fonction du nom du sous dictionnaire.
L'idée étant que chaque partie du texte est précédé d'un mot (dans mon exemple dict quelque chose) et pour chaque partie différente on applique un changement de mot.
Pour faire simple on applique le changement de mot du dictionnaire en fonction du nom du sous dictionnaire.
Bonsoir, excuse moi pour mon délais de réponse.
Tu trouveras ci-joint le fichier complet : https://www.cjoint.com/c/KDotKZBgiSJ
La ou le code ne fonctionne pas comme je voudrais c'est pour la chose suivante.
Si je rentre un sous_dict (exemple "C" pour la ligne 253 :
Cela fonctionne comme je veux. Par contre si je rentre le premier sous_dict
Je tombe sur l'erreur :
La où mon code pose aussi problème c'est que j'aimerais qu'il effectue les modifications sur mes fichiers pour toutes les données de mon dictionnaire et non pour un sous_dict en particulier.
Merci encore pour ton temps et ton aide !
Tu trouveras ci-joint le fichier complet : https://www.cjoint.com/c/KDotKZBgiSJ
La ou le code ne fonctionne pas comme je voudrais c'est pour la chose suivante.
Si je rentre un sous_dict (exemple "C" pour la ligne 253 :
sous_dict = dict["C"]
Cela fonctionne comme je veux. Par contre si je rentre le premier sous_dict
sous_dict = dict["***PROTECTION REACTEUR"]
Je tombe sur l'erreur :
Traceback (most recent call last): File "Manta-v3.8.0.py", line 270, in <module> folder(x, x + "V") File "yg_be.py", line 263, in folder fout.write(replacing1(x,sous_dict)) File "yg_be.py", line 245, in replacing1 return re.sub(regex_patt_list, replacer, text) File "/usr/lib64/python2.6/re.py", line 151, in sub return _compile(pattern, 0).sub(repl, string, count) File "/usr/lib64/python2.6/re.py", line 245, in _compile raise error, v # invalid expression sre_constants.error: nothing to repeat
La où mon code pose aussi problème c'est que j'aimerais qu'il effectue les modifications sur mes fichiers pour toutes les données de mon dictionnaire et non pour un sous_dict en particulier.
Merci encore pour ton temps et ton aide !
le premier sous-dictionnaire est défectueux.
tu peux peut-être le déclarer ainsi:
je pense que le code choisit, pour chaque partie du fichier, quel sous-dictionnaire utiliser, comme tu as expliqué en #10.
n'est-ce pas ce que tu souhaites?
si c'est ce que tu souhaites, donne un exemple de fichier texte pour lequel cela ne fonctionne pas.
si ce n'est pas ce que tu souhaites, explique ce que tu souhaites. de préférence avec un exemple précis.
tu peux peut-être le déclarer ainsi:
dict = {'***PROTECTION REACTEUR': {"\*\*\*PROTECTION REACTEUR": "***CONTROLE COMMANDE DEBUT"},
je pense que le code choisit, pour chaque partie du fichier, quel sous-dictionnaire utiliser, comme tu as expliqué en #10.
n'est-ce pas ce que tu souhaites?
si c'est ce que tu souhaites, donne un exemple de fichier texte pour lequel cela ne fonctionne pas.
si ce n'est pas ce que tu souhaites, explique ce que tu souhaites. de préférence avec un exemple précis.