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 :

Afficher des sous listes dans un fichier texte.


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2020
    Messages
    25
    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 : 25
    Points : 17
    Points
    17
    Par défaut Afficher des sous listes dans un fichier texte.
    Bonjour,

    J'ai conçu un début de script qui me permet de remplacer des mots d'un fichier texte et de les écrire dans un autre fichier, suivant une liste prédéfinie.
    Par exemple : Si dans le fichier a.txt il y a le mot "Fruit", et bien en parcourant le fichier il va remplacer tous les mots "Fruit" par "Pomme".
    Sauf que là ou j'ai un problème c'est que un mot comme "Fruit" doit être assimilé(remplacé) par plusieurs mots en fonction de son emplacement dans le texte.

    J'ai donc pensé à faire des sous listes, mais je ne parviens pas à quelque chose de concluant..


    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
     
    import re
    remplacement_dict = {"A":{'fruit':'pomme','frut':'poulpe'}, "B":{'fruit':'poire','pistache':'tomate'}}
     
    print(remplacement_dict)
     
    with open("a.txt") as fichier, open("b.txt", "w") as nouveaufichier:
     texte = fichier.read()
     
    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))
    Merci d'avance pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 698
    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 : 12 698
    Points : 30 997
    Points
    30 997
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Philippe1234 Voir le message
    J'ai donc pensé à faire des sous listes, mais je ne parviens pas à quelque chose de concluant..
    Désolé mais on ne peut pas traduire ta pensée à ta place. Tel que je vois ton code, dans le cas "A" tu remplaces "fruit" par "pomme" et dans le cas "B" tu remplaces "fruit" par "poire". Déjà il faut pouvoir définir ce qu'est ce cas "A" ou "B" vu depuis le fichier.
    Si c'est le mot qui est la référence, et que ce mot doit être remplacé par toto ou titi selon sa positionX ou Y, alors moi j'associerais au mot "postionX:toto", "positionY:titi". Exemple remplacement={"mot" : {"positionX" : "toto", "positionY" : "titi"}}.
    Si maintenant c'est la position qui est référence, alors je mettrais la position en clef principale du dico et le mot en clef secondaire style remplacement={"positionX" : {"mot" : "toto"}, "positionY" : {"mot" : "titi"}} (ce qui effectivement ressemble à ce que tu as écrit). Reste quand-même à associer cette positionX ou positionY au contenu du fichier.

    Accessoirement insérer des fonctions au beau milieu du code effectif c'est assez moyen.
    Mon Tutoriel sur la programmation «Python»
    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
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2020
    Messages
    25
    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 : 25
    Points : 17
    Points
    17
    Par défaut
    Bonjour,

    Et tout d'abord merci pour ta réponse.

    Pour être plus précis, l'idée de ce script serait de remplacer dans un texte selon des parties précises (qui existent déjà) des mots.
    Je connais les parties. Par exemple un paragraphe va commencer par "Partie 1" et chaque partie, commence par un titre (exemple : Partie 1, Partie 2, etc..)

    Et ce que j'aimerais faire d'où l'idée des sous dictionnaire avec cette syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    remplacement={"Partie1" : {"fruit" : "poire, "légume" : "courgette"}}
    Le problème que j'ai à partir d'ici, c'est comment modifier ses mots dans le nouveau fichier.

    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
     
    import re
    remplacement_dict = {"A":{'fruit':'pomme','frut':'poulpe'}, "B":{'fruit':'poire','pistache':'tomate'}}
     
    print(remplacement_dict)
     
    with open("a.txt") as fichier, open("b.txt", "w") as nouveaufichier:
     texte = fichier.read()
     
    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))
    Ce code fonctionne si la première ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    remplacement_dict = {"A":{'fruit':'pomme','frut':'poulpe'}, "B":{'fruit':'poire','pistache':'tomate'}}
    est remplacée par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    remplacement_dict = {'fruit':'pomme','frut':'poulpe',fruit':'poire','pistache':'tomate'}
    Mais je ne sais pas comment afficher ces modifications dans le deuxième fichier avec ce principe de sous dictionnaire associé à une clé.

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 698
    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 : 12 698
    Points : 30 997
    Points
    30 997
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Philippe1234 Voir le message
    Je connais les parties. Par exemple un paragraphe va commencer par "Partie 1" et chaque partie, commence par un titre (exemple : Partie 1, Partie 2, etc..)

    Et ce que j'aimerais faire d'où l'idée des sous dictionnaire avec cette syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    remplacement={"Partie1" : {"fruit" : "poire, "légume" : "courgette"}}
    Le problème que j'ai à partir d'ici, c'est comment modifier ses mots dans le nouveau fichier.
    Il te faut pouvoir identifier dans quelle partie tu te trouves quand tu lis le fichier. Donc associer à une variable ladite partie.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    à chaque ligne lue, faire
        si ligne == "Partie1" alors variable="Partie1"
    fin faire
    Ensuite ça devient plus trivial de voir si un mot se trouve dans remplacement[variable].keys() alors le remplacer par remplacement[variable][mot].

    Donc un code qui "ressemblerait" à ceci
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    for ligne in fin:
        if ligne in ("Partie1", "Partie2", "Partie3", ...):
            ident=ligne
            nouveaufichier.write(ligne)
            continue
        # if
     
        mots=ligne.split()
        for i in range(len(mots)):
            if mots[i] in remplacement[ident].keys(): mots[i]=remplacement[ident][mots[i]]
     
        nouveaufichier.write(" ".join(mots))
    # for

    Bon c'est pas vraiment ça car je découpe les lignes sur l'espace alors qu'il peut y avoir de la ponctuation mais c'est juste pour montrer l'idée...
    Mon Tutoriel sur la programmation «Python»
    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
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2020
    Messages
    25
    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 : 25
    Points : 17
    Points
    17
    Par défaut
    Je vais essayer de m'en inspirer.

    Merci pour ton aide.

Discussions similaires

  1. Afficher des sous-requêtes dans une requête
    Par ZashOne dans le forum Sql*Plus
    Réponses: 6
    Dernier message: 16/04/2008, 10h07
  2. Réponses: 3
    Dernier message: 06/03/2008, 16h50
  3. Réponses: 3
    Dernier message: 10/06/2007, 14h59
  4. Réponses: 3
    Dernier message: 04/01/2007, 17h42
  5. Transposer des données sql dans un fichier texte
    Par Anakior dans le forum Outils
    Réponses: 3
    Dernier message: 11/12/2005, 10h01

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