IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Problème code Dict [Python 2.X]


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juillet 2020
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : juillet 2020
    Messages : 23
    Points : 15
    Points
    15
    Par défaut Problème code Dict
    Bonjour,

    Je vous explique mon problème, j'ai déclaré un dict, qui comporte plusieurs sous-dict. (C'est un code que j'avais fait il y a longtemps et j'avoue que j'ai du mal à me replonger de dans et peut être qu'un avis extérieur pourrait m'aider).

    Le code ci-dessous permet de modifier un texte présent dans un dictionnaire (exemple : "Bonjour" devient "Bonsoir), le souci est que mon code fonctionnait suivant un sous-dict précisé et pas sur le dict complet.

    Ma demande serait de pouvoir exécuter mon code sur le dictionnaire complet.

    Pour executer le code que voici, j'insérais 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    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)

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    8 973
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 8 973
    Points : 24 592
    Points
    24 592
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Philippe1234 Voir le message
    Je vous explique mon problème, j'ai déclaré un dict, qui comporte plusieurs sous-dict. (C'est un code que j'avais fait il y a longtemps et j'avoue que j'ai du mal à me replonger dedans et peut être qu'un avis extérieur pourrait m'aider).
    Ben déjà tout ce qui est "dict", "input" comme nom de variable faut changer, ce sont des mots clefs Python !!!
    Accessoirement la fonction find_END peut se réécrire ainsi: def find_END(line): return re.search(r'\bFIN\b', line) (éventuellement return bool(re.search(r'\bFIN\b', line)) si vraiment tu veux obtenir explicitement True/False)

    Citation Envoyé par Philippe1234 Voir le message
    Ma demande serait de pouvoir exécuter mon code sur le dictionnaire complet.
    Ben c'est sur cette instruction sous_dict = dict["Dict3"] qu'il faut agir et créer une boucle sur chaque valeur de la variable "dict" (super le nom !!!). Ex for sous_dict in dict.values()...
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juillet 2020
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : juillet 2020
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Bonjour et merci pour ta réponse.

    J'avoue que j'ai beaucoup de lacune et peu d'expérience en Python, je ne suis pas très à l'aise donc je fais au plus simple.

    C'est exactement l'idée d'une boucle comme tu me l'as proposé que je cherche à faire, merci pour le conseil.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    juin 2008
    Messages
    17 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 17 719
    Points : 30 590
    Points
    30 590
    Par défaut
    Salut,

    Citation Envoyé par Philippe1234 Voir le message
    J'avoue que j'ai beaucoup de lacune et peu d'expérience en Python, je ne suis pas très à l'aise donc je fais au plus simple.
    Le gros du boulot est fait ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    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)
    Et si on passe à replacing1 un dictionnaire avec +sieurs clefs: comme D = { "Pomme": "Poire", "Banane": "Tomate" , "fleur": "Arbre" }... çà ne devrait pas marcher si mal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> D = { "Pomme": "Poire",  "Banane": "Tomate" , "fleur": "Arbre" }
    >>> replacing1('Pomme Banane fleur toto', D)
    'Poire Tomate Arbre toto'
    >>>
    Si vous vous étiez effectivement creusé un peu le ciboulot pour le mettre au point vous sauriez comment l'utiliser: la programmation, c'est comme le vélo, çà ne s'oublie pas!
    (Et les moteurs de recherche permettent aussi de retrouver facilement ce genre de code...)

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juillet 2020
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : juillet 2020
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Bonsoir,

    Un très grand merci pour ton aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème code de la fonction Rechercher et Remplacer
    Par LaPanic dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 25/06/2007, 17h10
  2. Problème code VBA :)
    Par Freygolow dans le forum Access
    Réponses: 4
    Dernier message: 17/05/2007, 15h43
  3. Probléme code C
    Par conceicao dans le forum C
    Réponses: 12
    Dernier message: 23/01/2007, 13h44
  4. Réponses: 6
    Dernier message: 23/12/2006, 12h46
  5. [Problème code] Afficher/Masquer div
    Par glloq8 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 24/03/2006, 14h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo