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 :

chaine python - caractère d'échappement - comparaison [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 303
    Par défaut chaine python - caractère d'échappement - comparaison
    Bonjour à tous,

    Le problème suivant me semble élémentaire et pourtant je cale.
    Si je regarde les 2 chaines suivantes :
    a= "Lorsqu'un fruit est éliminé"
    b= "Lorsqu\'un fruit est éliminé"
    Pourquoi b affiche t'il les caractères d'échappement et pas a ?
    Comment puis-je forcer a à faire de même ? En fait, j'ai besoin d'effectuer des comparaisons sur ces chaines et pour cela il faut qu'elles soient d'un format identique et que le format affiche également les retours à la ligne.
    J'ai bien essayé les fonctions str() et repr() mais sans résultat.

    Merci

  2. #2
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2018
    Messages : 15
    Par défaut
    Bonjour

    Je ne suis pas certain de comprendre le pb car dans la variable a il n'y a pas de caractère d'échappement.

    Je tente quand même quelque chose : as-tu essayé avec un 'r' devant les chaines ? b= r"Lorsqu\'un fruit est éliminé"

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 685
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 685
    Par défaut
    comment ont été formée tes chaines, c'est peut-être la la bonne question à se poser, car si je rentre ces 2 chaines dans mon interpréteur python telles que tu les présentes, les 2 chaines sont identiques (a==b => true)

    Edit: tu peux tenter un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c= bytes(b,'ansi').decode('unicode_escape')
    (adapter l'encoding dans bytes)

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 303
    Par défaut
    Bonjour,

    Pour illustrer et surtout comprendre mon problème, je viens d'écrire un script simplifié :
    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
    from odfdo import Document, Paragraph
     
    def creer_document(texte_para1,texte_para2):
        print('-------   creer_document()   -----------------')
     
        doc=Document()
     
        para1=Paragraph(texte_para1)
        doc.body.append(para1)
     
        para2=Paragraph(texte_para2)
        doc.body.append(para2)
     
        return doc
     
     
    def cherche(doc,parent):
        print("--------   cherche()   ----------------")
        para=doc.body.get_paragraph(content=parent)
     
        # repr_paragraphe
        repr_paragraphe=repr(para.get_formatted_text()) ## Ceci me permet d'intégrer les retours à la ligne dans ma chaine
        print('~~~~ repr_paragraphe : ',repr_paragraphe)
     
     
    if __name__ == '__main__':
        texte_para1="""Une fois que tous le bois abîmé ou gênant et toutes les branches concurrentes ont été supprimés pour préserver la forme de l'arbre,"""
     
        texte_para2="""la troisième étapes est de renouveler le bois de fructification et réduire les dimensions de l'arbre, afin qu'il soit plus facile à récolter, à protéger ou à asperger.
    Une alternative au fastidieux "éclaircissage des fruits" """
     
        # Dans quel para se trouve le texte suivant :
        parent1="toutes les branches concurrentes ont été supprimés pour préserver la forme de l'arbre"
        parent2="la troisième étapes est de renouveler le bois de fructification et réduire les dimensions de l'arbre"
     
     
        doc=creer_document(texte_para1,texte_para2)
     
        cherche(doc,parent1)
        cherche(doc,parent2) ##  parent2 inclut des guillemets et pour cette raison cherche() imprime également les échappements devant les apostrophes
    qui donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    -------   creer_document()   -----------------
    --------   cherche()   ----------------
    ~~~~ repr_paragraphe :  "Une fois que tous le bois abîmé ou gênant et toutes les branches concurrentes ont été supprimés pour préserver la forme de l'arbre,\n\n"
    --------   cherche()   ----------------
    ~~~~ repr_paragraphe :  'la troisième étapes est de renouveler le bois de fructification et réduire les dimensions de l\'arbre, afin qu\'il soit plus facile à récolter, à protéger ou à asperger.\nUne alternative au fastidieux "éclaircissage des fruits"\n\n'
    Puisque avec texte2, les échappements sont nécessaires et automatiquement inclus, je voudrais forcer leur utilisation avec texte.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 303
    Par défaut
    Le problème étant identifié, je devrais m'en sortir de cette manière :
    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
    from odfdo import Document, Paragraph
     
    def creer_document(texte_para1,texte_para2):
        print('-------   creer_document()   -----------------')
     
        doc=Document()
     
        para1=Paragraph(texte_para1)
        doc.body.append(para1)
     
        para2=Paragraph(texte_para2)
        doc.body.append(para2)
     
        return doc
     
     
    def cherche(doc,parent):
        print("--------   cherche()   ----------------")
        para=doc.body.get_paragraph(content=parent)
     
        # repr_paragraphe
        repr_paragraphe=repr(para.get_formatted_text()) ## Ceci me permet d'intégrer les retours à la ligne dans ma chaine
        print('~~~~ repr_paragraphe : ',repr_paragraphe)
     
        if r"\'" in repr_paragraphe:
            repr_paragraphe=repr_paragraphe.replace(r"\'",r"'")
            print("~~~~ repr_paragraphe SANS LES ECHAPPEMENTS : ",repr_paragraphe)
     
     
    if __name__ == '__main__':
        texte_para1="""Une fois que tous le bois abîmé ou gênant et toutes les branches concurrentes ont été supprimés pour préserver la forme de l'arbre,"""
     
        texte_para2="""la troisième étapes est de renouveler le bois de fructification et réduire les dimensions de l'arbre, afin qu'il soit plus facile à récolter, à protéger ou à asperger.
    Une alternative au fastidieux "éclaircissage des fruits" """
     
        # Dans quel para se trouve le texte suivant :
        parent1="toutes les branches concurrentes ont été supprimés pour préserver la forme de l'arbre"
        parent2="la troisième étapes est de renouveler le bois de fructification et réduire les dimensions de l'arbre"
     
     
        doc=creer_document(texte_para1,texte_para2)
     
        cherche(doc,parent1)
        cherche(doc,parent2) ##  parent2 inclut des guillemets et pour cette raison cherche imprime également les échappements devants les apostrophes
    ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    -------   creer_document()   -----------------
    --------   cherche()   ----------------
    ~~~~ repr_paragraphe :  "Une fois que tous le bois abîmé ou gênant et toutes les branches concurrentes ont été supprimés pour préserver la forme de l'arbre,\n\n"
    --------   cherche()   ----------------
    ~~~~ repr_paragraphe :  'la troisième étapes est de renouveler le bois de fructification et réduire les dimensions de l\'arbre, afin qu\'il soit plus facile à récolter, à protéger ou à asperger.\nUne alternative au fastidieux "éclaircissage des fruits"\n\n'
    ~~~~ repr_paragraphe SANS LES ECHAPPEMENTS :  'la troisième étapes est de renouveler le bois de fructification et réduire les dimensions de l'arbre, afin qu'il soit plus facile à récolter, à protéger ou à asperger.\nUne alternative au fastidieux "éclaircissage des fruits"\n\n'
    Je ne comprends pas comment c'est possible que la chaine soit dans ma console toujours délimitée par des guillemets simples identiques avec les apostrophes utilisés mais je confirme,ça marche.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 685
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 685
    Par défaut
    je ne vois pas de problème ou ne comprends pas le problème, test chaines sont identiques (au retour à la ligne près) si tu ne stockes par leur représentation.
    Si tuu écris tes textes ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        texte_para1="""Une fois que tous le bois abîmé ou gênant et toutes les branches concurrentes ont été supprimés pour préserver la forme de l\'arbre,"""
     
        texte_para2="""la troisième étapes est de renouveler le bois de fructification et réduire les dimensions de l\'arbre, afin qu\'il soit plus facile à récolter, à protéger ou à asperger.
    Une alternative au fastidieux "éclaircissage des fruits" """
     
        # Dans quel para se trouve le texte suivant :
        parent1="toutes les branches concurrentes ont été supprimés pour préserver la forme de l'arbre"
        parent2="la troisième étapes est de renouveler le bois de fructification et réduire les dimensions de l'arbre"
    ça ne changera strictement rien au résultat, ça te retournera bien tes 2 paragraphes

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 303
    Par défaut
    Pour aller plus loin :
    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
    from odfdo import Document, Paragraph
    
    def creer_document(texte_para1,texte_para2):
        print('-------   creer_document()   -----------------')
    
        doc=Document()
    
        para1=Paragraph(texte_para1)
        doc.body.append(para1)
    
        para2=Paragraph(texte_para2)
        doc.body.append(para2)
    
        return doc
    
    
    def cherche(doc,parent):
        print("--------   cherche()   ----------------")
        para=doc.body.get_paragraph(content=parent)
    
        # repr_paragraphe
        repr_paragraphe=repr(para.get_formatted_text()) ## Ceci me permet d'intégrer les retours à la ligne dans ma chaine
        print('~~~~ repr_paragraphe : ',repr_paragraphe)
    
        index_parent=repr_paragraphe.find(parent)
        print('--- index de : {} -->  '.format(parent),index_parent) ## --> ## find() retourne -1 si la chaine n'a pas été trouvée.
    
        if r"\'" in repr_paragraphe:
            repr_paragraphe=repr_paragraphe.replace(r"\'",r"'")
            print("~~~~ repr_paragraphe SANS LES ECHAPPEMENTS : ",repr_paragraphe)
            index_parent=repr_paragraphe.find(parent)
            print('--- index de : {} --> '.format(parent),index_parent)
    
    
    if __name__ == '__main__':
        texte_para1="""Une fois que tous le bois abîmé ou gênant et toutes les branches concurrentes ont été supprimés pour préserver la forme de l'arbre,"""
    
        texte_para2="""la troisième étapes est de renouveler le bois de fructification et réduire les dimensions de l'arbre, afin qu'il soit plus facile à récolter, à protéger ou à asperger.
    Une alternative au fastidieux "éclaircissage des fruits" """
    
        # Dans quel para se trouve le texte suivant :
        parent1="la forme de l'arbre"
        parent2="réduire les dimensions de l'arbre"
    
    
        doc=creer_document(texte_para1,texte_para2)
    
        cherche(doc,parent1)
        cherche(doc,parent2) ##  parent2 inclut des guillemets et pour cette raison cherche imprime également les échappements devants les apostrophes
    donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    -------   creer_document()   -----------------
    --------   cherche()   ----------------
    ~~~~ repr_paragraphe :  "Une fois que tous le bois abîmé ou gênant et toutes les branches concurrentes ont été supprimés pour préserver la forme de l'arbre,\n\n"
    --- index de : la forme de l'arbre -->   112
    --------   cherche()   ----------------
    ~~~~ repr_paragraphe :  'la troisième étapes est de renouveler le bois de fructification et réduire les dimensions de l\'arbre, afin qu\'il soit plus facile à récolter, à protéger ou à asperger.\nUne alternative au fastidieux "éclaircissage des fruits"\n\n'
    --- index de : réduire les dimensions de l'arbre -->   -1
    ~~~~ repr_paragraphe SANS LES ECHAPPEMENTS :  'la troisième étapes est de renouveler le bois de fructification et réduire les dimensions de l'arbre, afin qu'il soit plus facile à récolter, à protéger ou à asperger.\nUne alternative au fastidieux "éclaircissage des fruits"\n\n'
    --- index de : réduire les dimensions de l'arbre -->  68

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

Discussions similaires

  1. [Python 2.7] Problème comparaison entre float
    Par pipodug dans le forum Général Python
    Réponses: 8
    Dernier message: 16/01/2016, 13h42
  2. Ajouter un caractere à une chaine python
    Par rosef dans le forum Général Python
    Réponses: 4
    Dernier message: 18/09/2013, 19h56
  3. sous chaine python
    Par ekremyilmaz dans le forum Général Python
    Réponses: 19
    Dernier message: 13/11/2008, 18h35
  4. Réponses: 5
    Dernier message: 06/10/2003, 18h49
  5. [LG]comparaison de chaines de caracteres
    Par thesam dans le forum Langage
    Réponses: 6
    Dernier message: 20/05/2003, 23h41

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