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 :

remplacer " par \"


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Janvier 2024
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Janvier 2024
    Messages : 166
    Par défaut remplacer " par \"
    bonjour
    c'est idiot mais je sèche !
    J'ai besoin de remplacer dans une chaîne le guillemet '"' par '"' et je tourne en rond.
    replace ('"','"')ne fonctionne pas car le '\' échappe (normal), curieusement '\"' non plus et je me retrouve avec des \" (étrange car le premier \ devrait normalement échapper le second).
    Encore plus curieux le suffixe 'r' ne donne rien on plus r'"' me remplace les '"' par '\"'

    J'imagine qu'il y a un truc mais je ne trouve pas.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 091
    Par défaut
    J'ai rien compris

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2022
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2022
    Messages : 423
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    s = 'Il a dit "Bonjour"'
    s2 = s.replace('"', '\\"')
    print(s2)
    Je fais mine d'avoir compris, c'est ça ?
    Un problème sans solution est un problème mal posé. (Albert Einstein)

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 754
    Par défaut
    Hello,

    replace ('"','"') ne fonctionne pas
    replace('"', '"') : Tu remplaces un guillemet par un guillemet. Aucun changement !

    https://docs.python.org/fr/3.14/refe...bytes-literals
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 609
    Par défaut
    je pense que les antislash ont été échappés par le forum, ce qui ne se serait pas produit si le code avait été mis dans une balise de code (bouton #)

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 091
    Par défaut
    @umfred, très perspicace...

  7. #7
    Membre averti
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Janvier 2024
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Janvier 2024
    Messages : 166
    Par défaut
    piège à c... mais gaby7756 a pigé !

    en effet !

    Je reprends
    j'ai un script en python qui lit un fichier texte puis en écrit un autre qui est du code php. Quelque soit la configuration je dois faire échapper un délimiteur " ou ' le problème étant le même dans chaque cas
    comme avec la phrase : "J'ai dit "Bonjour" "
    lorsqu'il lit 'double quote' (concrètement si le item d'une liste contient ' " ' , je veux qu'il le remplace par Et comme je l'ai raconté je n'arrive pas ! Notamment ne fonctionne pas à mon grand étonnement je l'avoue puisque je m'attendais à ce que le premier \ échappe le suivant ce qui ne fonctionne pas : un "replace" avec n'écrit pas un seul \ mais deux !

    ça ferait un mignon exercice de python !

  8. #8
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 091
    Par défaut
    c'est le print qui met deux "" mais y en a qu'un en fait.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i in "'hello'".replace("'","\\'"):
        print(i)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    \
    '
    h
    e
    l
    l
    o
    \
    '

  9. #9
    Membre chevronné
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2022
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2022
    Messages : 423
    Par défaut
    Du coup c'est ça que tu as demandé ?

    Si tu veux être plus clair,
    Donne ce que tu as test
    Puis tu dis ce que tu as en entrée et ce que tu veux en sortie comme par exemple :

    je veux que " devienne " dans une chaine de caractère.

    Exemple : "Salut je m'appelle grout" => "Salut je m\'appelle grout"


    Parce que navré mais je comprend rien et je pense pas être le seul...
    Un problème sans solution est un problème mal posé. (Albert Einstein)

  10. #10
    Membre averti
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Janvier 2024
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Janvier 2024
    Messages : 166
    Par défaut
    c'est ça !

    Par exemple fichier.readline() envoie " j'ai dit "bonjour" tout le monde ' et je voudrais que après toto.write( je ne sais pas quoi ) le fichier de sorti contienne la ligne

    j'ai dit \"bonjour tout le monde \"

  11. #11
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 091
    Par défaut
    Ha ouais, c'est encore moins clair...

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 609
    Par défaut
    tu dois confondre les guillemets liés au fait que la donnée est une chaine (une chaine sera toujours entourée de guillemets pour la délimiter) et les guillemets contenus dans la chaine ?
    Relis réponse de josmiley d'hier à 21h08

  13. #13
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 544
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 544
    Par défaut
    Citation Envoyé par noradan Voir le message
    j'ai un script en python qui lit un fichier texte puis en écrit un autre qui est du code php. Quelque soit la configuration je dois faire échapper un délimiteur " ou ' le problème étant le même dans chaque cas
    comme avec la phrase : "J'ai dit "Bonjour" "
    Il y a quelques pièges à éviter, cela dit : il y a d'abord la « représentation » que Python fait de n'importe quelle donnée ou instance de classe, notamment dans la ligne de commande, et le traitement qui en est fait en pratique. En particulier depuis la ligne de commande :

    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> '\\"'
    '\\"'
    >>> print('\\"')
    \"

    Ici, on protège l'anti-slash par le caractère d'échappement (ce même anti-slash) suivi du guillemet qui n'a pas besoin d'être protégé puisqu'on utilise l'autre délimiteur de chaîne (l'apostrophe). À la deuxième ligne cependant, la chaîne ainsi produite contient bien deux caractères (\ puis "), mais Python représente cette chaîne telle qu'elle doit être saisie pour être comprise. C'est également nécessaire si la chaîne contient des caractères spéciaux et/ou non affichables. Par contre, la commande print la restitue bien comme attendu.

    Ensuite, si tu échanges des données entre langages :

    • En Python, " et ' sont équivalents, à ceci près qu'il permettent respectivement d'utiliser directement l'autre délimiteur au sein de la chaîne ;
    • En langage C, ' sert à indiquer le code d'un caractère seul et est considéré comme un entier de type « char » et pas comme un pointeur de chaîne « char * » ;
    • En Shell et dans la plupart des langages qui en dérivent, " permet de traiter une chaîne en honorant tous les caractères spéciaux (échappement, mais également marqueurs de variables tel que $), donc une chaîne ' ' devrait ignorer les caractères d'échappement (mais pas en Python). Avec cela, les chaînes " sont permissifs à l'interprétation, à condition que le langage lui même le prévoie :


    Cela donne notamment, en bash :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ echo \n
    n
    $ echo '\n'
    \n
    $ echo "\n"
    \n
    $ echo "\\n"
    \n
    $ echo '\\n' 
    \\n
    Dans cet exemple, cela fonctionne comme attendu mais en temps normal, bash ne va honorer que les « \\ » (pour composer des lignes de commandes propres) mais va ensuite passer les chaînes telles quelles en paramètres des commandes auxquelles elles sont passées. L'option « -e » de la commande echo en particulier, par contre, permet de demander à celle-ci l'interprétation de ces séquences.

  14. #14
    Membre averti
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Janvier 2024
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Janvier 2024
    Messages : 166
    Par défaut
    merci pour tout ça
    Pour le moment j'ai résolu le problème comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     if "'" in item:item.replace("'","\'")
     if '"' in item:item.replace('"','\"')
    C'est moche mais ça a l'air de focntionner

    Je ferme

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 609
    Par défaut
    a priori ça te convient pas si tu as rouvert un sujet sur openclassrooms
    https://openclassrooms.com/forum/suj...acer-par-77179

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

Discussions similaires

  1. [2012] for xml, remplacement quote
    Par jord140 dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 28/05/2014, 12h53
  2. Réponses: 3
    Dernier message: 23/01/2006, 13h02
  3. Remplacer null par...
    Par HichamK dans le forum Oracle
    Réponses: 4
    Dernier message: 17/01/2006, 14h56
  4. Réponses: 2
    Dernier message: 14/11/2005, 14h33
  5. [ASP] include remplacer chemin par variable
    Par damn dans le forum ASP
    Réponses: 3
    Dernier message: 01/10/2004, 16h27

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