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 :

Rechercher et remplacer des caractères dans un fichier


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 7
    Points : 8
    Points
    8
    Par défaut Rechercher et remplacer des caractères dans un fichier
    Bonjour,

    Je débute en python et ma question va peut être paraitre simple mais j'ai du mal à trouver la solution. J'ai donc décidé de me tourner vers vous. Voila mon problème.

    Ce que je cherche à faire (du moins la partie bloquante) c'est modifier les expressions d'un fichier afin quelles corresponde à un "standard".
    Pour cela, je procède de la manière suivante :
    • je demande à l'utilisateur le nom de son expression a, b, c...
    • J'ajoute ces expressions dans un dictionnaire et j'ajoute la clef correspondante (variable mise en forme)
    • j'ouvre le fichier et je le lit
    • je remplace les expressions a, b,c.. par les clefs correpondantes en les vérifiant une à une dans une boucle for
    • j'écris la nouvelle chaine dans le fichier


    Si cela n'est pas clair, voila le bout de programme :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    f = open(fichier,"r")
    chaine= f.read()
    for cle in index:
        chaine = chaine.replace(cle, index[cle])
    f.close
    f=open(fichier,"w")
    f.write(chaine)
    f.close()
    Le code compile et s’exécute. Mon soucis est que si deux expressions se ressemblent, elles sont modifiées deux fois.
    Par exemple l'utilisateur me donne :
    • expression a = Maman
    • expression b = Mama

    Que je remplace respectivement par _L_Maman et _L_Mama et bien si Maman se trouve dans le fichier à traiter il deviendra d'abord _L_Maman puis _L__LMama par exemple puisqu'il sera remplacé par les deux clefs.
    Je ne sais pas si je suis très clair dans le cas contraire n'hésiter pas à me le dire j'essaierais d'expliquer différemment.

    Comment éviter ce probleme existe t il un moyen de faire quelque chose du style string.replace(option=expression_exact) ? Ou vaudrait il mieux passer par les regex ?

    Merci d'avance pour votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par klimon Voir le message
    Bonjour,

    Ou vaudrait il mieux passer par les regex ?

    Merci d'avance pour votre aide.
    Bonjour,

    Vous avez la réponse dans votre question.

    Comme vous n'avez pas précisé la version de Python que vous utilisez :

    Python2 : https://docs.python.org/2/library/re.html

    Python3 : https://docs.python.org/3/library/re.html

    @+.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    D'abord merci de la réponse rapide.

    J'ai effectivement oublié de préciser que je suis en python 3

    Je me doutais un peu de la réponse en fait mais je ne sais pourquoi je fais un "blocage" sur les regex..
    Dans mon cas, quelle est la façon de faire le plus adéquat selon vous ? Faut il passer par un re.fullmatch ou juste un re.search ? J'ai du mal à voir toutes les subtilités qui existent.

    Merci encore

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par klimon Voir le message
    D'abord merci de la réponse rapide.

    J'ai effectivement oublié de préciser que je suis en python 3

    Je me doutais un peu de la réponse en fait mais je ne sais pourquoi je fais un "blocage" sur les regex..
    Dans mon cas, quelle est la façon de faire le plus adéquat selon vous ? Faut il passer par un re.fullmatch ou juste un re.search ? J'ai du mal à voir toutes les subtilités qui existent.

    Merci encore
    Bah non :

    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
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
     
    import re
     
    # note: tout ceci est valable tant que @mot ne contient pas des
    # caractères susceptibles de leurrer le regexp, évidemment;
    # il faudra donc s'assurer que @mot ne contient que des caractères
    # valides pour l'expression...
     
    texte = "Hé Mama ! Où est passée Maman ?"
     
    print(texte)
     
    # première substitution
     
    mot = "Maman"
     
    texte = re.sub(r"\b({})\b".format(mot), r"_L_\1", texte)
     
    print("\nOn traite le mot :", mot, "\nRésultat :", texte)
     
    # seconde substitution
     
    mot = "Mama"
     
    texte = re.sub(r"\b({})\b".format(mot), r"_L_\1", texte)
     
    print("\nOn traite le mot :", mot, "\nRésultat :", texte)
    re.sub() devrait suffire (restons simples).

    @+.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Essayons de rester simple alors ! Je ne sais pas pourquoi mais c'est souvent ça le plus dur.
    Ok pour sub je vais tenter comme ça et je vous tiens au courant. Par contre je n'ai pas compris ce que faisait ".format(mot)" pouvez vous m'expliquez ?

    En tout cas merci de votre aide.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par klimon Voir le message
    Essayons de rester simple alors ! Je ne sais pas pourquoi mais c'est souvent ça le plus dur.
    Eh oui c'est même là tout l'art du développeur : réussir à faire simple est extrêmement compliqué.

    Ok pour sub je vais tenter comme ça et je vous tiens au courant. Par contre je n'ai pas compris ce que faisait ".format(mot)" pouvez vous m'expliquez ?
    On n'est jamais mieux servi que par ceux qui ont écrit cette fonctionnalité : https://docs.python.org/3/library/st...tml#str.format

    mais aussi https://docs.python.org/3/library/st...-string-syntax

    ainsi que https://docs.python.org/3/library/st...-mini-language

    En gros, pour résumer vite fait : format("chaine de formatage contenant des {} anonymes ou des {0} {1} {2} indexés ou des {nom1} {nom2} {nom3} nommés plus d'autres choses encore, seront remplacés par :", variable, var0, var1, var2, nom1=var3, nom2=var4, nom3=var5)

    autre notation : "chaine de formatage contenant des {} anonymes ou des {0} {1} {2} indexés ou des {nom1} {nom2} {nom3} nommés plus d'autres choses encore, seront remplacés par :".format(variable, var0, var1, var2, nom1=var3, nom2=var4, nom3=var5)

    @+.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Désolé pour la réponse tardive j'étais un peu occupé dernièrement.
    J'ai enfin pu essayer votre solution en me plongeant dedans malgré ma "phobie"

    Finalement ça s'est plutôt bien passé et je n'en suis pas mort

    Le programme s’exécute désormais exactement comme je le souhaite merci à toi tarball69

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

Discussions similaires

  1. Rechercher et remplacer des caractères d'un fichier
    Par ptitemeuh dans le forum Débuter
    Réponses: 5
    Dernier message: 21/12/2011, 12h16
  2. [Batch] Remplacer des caractères dans un fichier texte
    Par Benoit Labbey dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 09/06/2009, 16h43
  3. Réponses: 3
    Dernier message: 27/06/2005, 16h24
  4. [D6] Comment remplacer des chaînes dans un fichier ?
    Par fabien25 dans le forum Langage
    Réponses: 4
    Dernier message: 15/06/2005, 13h37
  5. Réponses: 5
    Dernier message: 25/01/2005, 14h26

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