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 :

Convertir une raw-string en string [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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 Convertir une raw-string en string
    Bonjour,

    J'ai une chaine de caractères écrite en dur dans le code. Comme elle est destinée à un motif d'expressions régulières, elle est en "raw string": ch = r" \t\n\r\f\v" soit 11 caractères.

    Mais à un autre endroit du code, je l'utilise comme une chaine normale, comme si je l'avais écrite: ch = " \t\n\r\f\v" soit 6 caractères.

    Mon problème: comment obtenir la 2ème chaine à partir de la 1ère, c'est à dire convertir la raw-string en string?

    Je sais le faire avec une boucle, des tests et des remplacements, mais j'aimerais bien une solution plus simple (que je n'ai pas trouvée dans la doc ni sur le web).

    Merci pour vos idées!

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 747
    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 747
    Par défaut
    s.encode('unicode-escape') pour Python3 ou s.encode('string-escape') pour la version2.
    ou 'raw-unicode-escape' suivant le besoin.

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

  3. #3
    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 wiztricks,

    Merci pour la réponse, mais j'avais déjà essayé, et je crois que c'est pour faire le contraire: string => raw-string.

    En tout cas, ça ne donne pas le résultat souhaité, et en plus, c'est un byte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ch = r" \t\n\r\f\v"
    ch = ch.encode('unicode-escape')
    print(ch)
    b' \\\\t\\\\n\\\\r\\\\f\\\\v'

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Par défaut
    Bonjour,

    j'ai peut-être une piste que je me souviens avoir vu sur Sam & Max, le principe de « Quine ».
    Qui consiste à afficher son propre code. Un code qui affiche son propre code source en s'exécutant.

    http://sametmax.com/quine-en-python/ L'article utilise python 2.

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 747
    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 747
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Merci pour la réponse, mais j'avais déjà essayé, et je crois que c'est pour faire le contraire: string => raw-string.
    Un "raw-string" n'est qu'un "literal", après il faut un peu réfléchir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> ch = r" \t\n\r\f\v"
    >>> len(ch)
    11
    >>> z = ch.encode().decode('unicode-escape')
    >>> len(z)
    6
    >>> z
    ' \t\n\r\x0c\x0b'
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    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
    Bravo, wiztricks, C'est exactement ça que je cherchais!

    Merci!


    Merci aussi à YCL-1 pour la suggestion: le quine est une belle curiosité (et un beau casse-tête), mais je n'ai pas trouvé comment l'utiliser pour résoudre mon problème.

    [Edit] si on veut mettre des caractères accentués dans la liste, il faut mettre un encodage comme "latin1":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    x = r" \t\n\r\f\vé"
    y = " \t\n\r\f\vé"
     
    z = x.encode("latin1").decode("unicode-escape")
    print(len(z))
    7
    print(z == y)
    True

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

Discussions similaires

  1. convertir une formule de type string en double
    Par SkyRhum dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 10/05/2012, 13h38
  2. convertir une chaine hexadecimale en string et vice-versa
    Par vinou94400 dans le forum VB.NET
    Réponses: 4
    Dernier message: 23/10/2009, 09h37
  3. Convertir une valeur Puchar en string
    Par Bourak dans le forum Langage
    Réponses: 11
    Dernier message: 03/04/2008, 15h51
  4. convertir une variable de type String en Number
    Par lilbrother974 dans le forum Flash
    Réponses: 13
    Dernier message: 06/09/2006, 08h28
  5. Convertir une date en type string
    Par ziboux dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 29/10/2003, 10h52

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