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 :

Remplacement d'un caract�re sur un scope pr�cis [Python 2.X]


Sujet :

Python

  1. #1
    Membre confirm�
    Inscrit en
    Mai 2007
    Messages
    103
    D�tails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 103
    Par d�faut Remplacement d'un caract�re sur un scope pr�cis
    Bonjour,

    je cherche � remplacer dans une chaine de caract�re un caract�re sp�cifique. (c'est issue d'un csv)

    un exemple sera plus parlant.

    toto|ta"|"ta|titi
    on veut obtenir :
    toto|ta"_"ta|titi

    ou encore un autre cas:
    toto|"ta|ta"|titi
    on veut obtenir :
    toto|"ta_ta"|titi

    ou encore un autre cas:
    toto|"ta|ta"| t"i|t"i
    on veut obtenir :
    toto|"ta_ta"|t"i_t"i


    la j'essaie de trouver une solution dans ce type la :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    with open(FullPath) as fichier:
    		for line in fichier:
    			line = re.sub(r"REGEX","_",line)
    			print (line)
    		fichier.close()
    mais bon �a marche pas type top ...

    Si vous avez une id�e de comment proc�der, je suis preneur.

    Merci par avance.

  2. #2
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 772
    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 : 21 772
    Par d�faut
    Salut,

    Citation Envoy� par la_fouine1806 Voir le message
    Si vous avez une id�e de comment proc�der, je suis preneur.
    J'avoue que je ne comprend pas quel(s) pattern(s) vous essayez de reconna�tre pour remplacer.
    On "voit" que vous voulez remplacez "|" par "_" mais s'agit-il de la 2�me occurrence de "|", du "|' entour� de?

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

  3. #3
    Membre confirm�
    Inscrit en
    Mai 2007
    Messages
    103
    D�tails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 103
    Par d�faut
    tout d'abord merci pour ta r�ponse.

    pour compl�ter un autre exemple j'esp�re �tre assez pr�cis

    l'entr�e est un CSV

    column 1 | column 2 | column 3
    toto |ta"|"ta | titi
    toto | "titi|" | tpu"|"

    on veut obtenir

    column 1 | column 2 | column 3
    toto |ta"_"ta | titi
    toto | "titi_" | tpu"_"

    dis moi si ce n'est pas plus claire, j'essayerai de l'�tre

  4. #4
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 772
    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 : 21 772
    Par d�faut
    Citation Envoy� par la_fouine1806 Voir le message
    pour compl�ter un autre exemple j'esp�re �tre assez pr�cis
    Pour moi les exemples devraient illustrer une description en fran�ais.
    Elle pourrait �tre: remplacer les | par _ lorsqu'ils apparaissent dans un terme d�limit� par des '"' ?
    Est ce le cas?

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

  5. #5
    Expert confirm�
    Avatar de tyrtamos
    Homme Profil pro
    Retrait�
    Inscrit en
    D�cembre 2007
    Messages
    4 486
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Retrait�

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par d�faut
    Bonjour,

    Je ne suis pas s�r d'avoir compris, mais le code suivant a l'air de traiter au moins les exemples donn�s:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ch1 = '''toto |ta"|"ta | titi'''
    ch2 = '''toto | "titi|" | tpu"|"'''
     
    motif = r'\|"'
    sub = r'_"'
     
    ch1_2 = re.sub(motif, sub, ch1)
    print(ch1_2) #=> toto |ta"_"ta | titi
     
    ch2_2 = re.sub(motif, sub, ch2)
    print(ch2_2) #=> toto | "titi_" | tpu"_"

  6. #6
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 772
    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 : 21 772
    Par d�faut
    Citation Envoy� par tyrtamos Voir le message
    Je ne suis pas s�r d'avoir compris, mais le code suivant a l'air de traiter au moins les exemples donn�s:
    Ce qui se r�sume � remplacer '|"' par '_"' .
    Pas besoin du module re dans ce cas, str.replace suffit largement.

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

  7. #7
    Membre confirm�
    Inscrit en
    Mai 2007
    Messages
    103
    D�tails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 103
    Par d�faut
    yep c'est exactement �a

    merci

  8. #8
    Expert confirm� Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activit� : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par d�faut
    �a ne fonctionne pas pour les exemples toto|"ta|ta"|titi et toto|"ta|ta"| t"i|t"i ou quand le caract�re de protection est pr�c�d� du s�parateur.

    Une solution consiste � chercher les sous-cha�nes entre les caract�res de protection et d'effectuer un remplacement sur chacune d'elles avec une fonction de callback:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    def repl(m):
        return m.group(0).replace('|', '_')
     
    print re.sub(r'"[^"]*"', repl, data)
    ou pour g�rer l'�chappement du caract�re de protection:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    def repl(m):
        return m.group(0).replace('|', '_')
     
    print re.sub(r'"(?:[^"]|"")*"', repl, data)

  9. #9
    Membre confirm�
    Inscrit en
    Mai 2007
    Messages
    103
    D�tails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 103
    Par d�faut
    juste une derni�re question.
    Dans la fonction replm, je cherche � mettre en param�tre le caract�re � remplacer et le caract�rede remplacement.

    pour l'instant j'ai essay� �a :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    def repl(m, pattern,replace):
        return m.group(0).replace(pattern,replace)
     
    print re.sub(r'"(?:[^"]|"")*"', repl(pattern,replace), data)
    Malheureusement �a ne marche pas ...

    Si quelqu'un a une id�e.

  10. #10
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 772
    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 : 21 772
    Par d�faut
    Salut,

    Citation Envoy� par la_fouine1806 Voir le message
    pour l'instant j'ai essay� �a :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    def repl(m, pattern,replace):
        return m.group(0).replace(pattern,replace)
     
    print re.sub(r'"(?:[^"]|"")*"', repl(pattern,replace), data)
    Malheureusement �a ne marche pas ...
    Ca ne peut pas marcher: votre fonction repl demande 3 param�tres.
    CosmoKnacki vous a donn� un exemple qui marche.
    Pourquoi ne pas le recopier (ou plut�t que cherchez vous � faire) ?

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

  11. #11
    Expert confirm� Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activit� : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par d�faut
    La m�thode string.replace() ne prend tout simplement pas de pattern comme premier argument mais une cha�ne litt�rale. J'ai choisi cette m�thode parce qu'� la base il s'agissait bien de remplacer la cha�ne litt�rale | et que, pour cette t�che, la m�thode string.replace() est plus rapide, en plus d'�tre plus ad�quate.

    Donc si maintenant tu souhaites modifier la fonction de callback repl de mani�re � ce qu'elle accepte une pattern plut�t qu'une cha�ne litt�rale, tu devras remplacer la m�thode string.replace() par la m�thode re.sub().

    Nota bene: un petit d�tour sur la page du module re te permettra de comprendre � quoi correspondent m et m.group(0) dans le code.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. remplacer un caract�re sur console
    Par malhek69 dans le forum C
    R�ponses: 18
    Dernier message: 07/12/2011, 13h22
  2. Remplacement de caract�res sur type TEXT
    Par CleeM dans le forum D�veloppement
    R�ponses: 1
    Dernier message: 09/08/2011, 10h05
  3. remplacement de caract�re sur plusieurs feuilles
    Par magicfrom dans le forum Macros et VBA Excel
    R�ponses: 7
    Dernier message: 21/05/2008, 09h59
  4. [RegEx] Remplacement de caract�res sur une page g�n�r�e en php
    Par _Alain_ dans le forum Langage
    R�ponses: 4
    Dernier message: 08/12/2007, 13h18
  5. [Delphi] Affichages de caract�res sur l'�cran
    Par julie20 dans le forum D�buter
    R�ponses: 12
    Dernier message: 17/09/2003, 23h21

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