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 :

Conversion d'accents qui ne fonctionne pas [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 74
    Par défaut Conversion d'accents qui ne fonctionne pas
    Bonjour,

    J'essaye de nettoyer en Python3 un fichier qui contient des codes spéciaux qui devraient correspondre à des accents:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #353= IFCPROPERTYSINGLEVALUE('Charge d''\X2\00E9\X0\clairage sp\X2\00E9\X0\cifi\X2\00E9\X0\e par surface',$,IFCREAL(10.7639104167097),$);
    J'ai créé cette petite fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    # -*- coding: utf-8 -*-
    ...
    def CleanSpace(sp):
        sp.replace("\X2\00F4\X0\","ô")
        sp.replace("\X2\00E9\X0\","é")
        return(sp)
    mais en exécutant mon programme, j'ai alors l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        sp.replace("\X2\00F4\X0\","ô")
                                   ^
    SyntaxError: invalid syntax
    Si je double le \ final : \X2\00F4\X0\\ je n'ai plus l'erreur mais la conversion en é ne se fait pas...

    J'ai tenté ensuite de lancer quelques commandes en console python mais le comportement de la chaîne me semble assez bizarre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $ python3
    Python 3.5.2 (default, Nov 23 2017, 16:37:01) 
    [GCC 5.4.0 20160609] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> a='02_RADIOTHERAPIE/ ARC -plateforme recherche- Radioth\X2\00E9\X0\rapie'
    >>> a
    '02_RADIOTHERAPIE/ ARC -plateforme recherche- Radioth\\X2\x00E9\\X0\rapie'
    >>> a.replace('\X2\00E9\X0\\','é')
    '02_RADIOTHERAPIE/ ARC -plateforme recherche- Radioth\\X2\x00E9\\X0\rapie'
    Des idées?
    Merci d'avance

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

    Python n'accepte pas que les chaînes de caractères en littéral se terminent pas un '\' qui est un caractère d’échappement (il doit y a voir des choses après) y compris pour les "raw-strings"...
    Et comment faire est décrit ici dans la FAQ Python.

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

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 74
    Par défaut
    Merci,
    j'ai essayé en ajoutant un:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    temp='\X2\\00E9\\X0\ '[:-1]
    	print("temp: "+temp)
    	sp.replace(temp,"é")
    Le print m'affiche bien \X2\00E9\X0\ mais la conversion de la ligne ne se fait pas plus...

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    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 754
    Par défaut
    Citation Envoyé par piploum Voir le message
    Le print m'affiche bien \X2\00E9\X0\ mais la conversion de la ligne ne se fait pas plus...
    Oui mais çà c'est parce que vous pensez que la chaîne de caractère ressemble à çà alors qu'en fait elle est différente. Relisez votre premier post et examinez les différences entre la chaîne de caractères assignée à "a" et ce qu'en affiche Python...
    En plus vous voyez que le dernier '\' qui posait soucis est collé à un 'r' ce qui fait que le '\' n'existe pas: '\r' est un seul caractère!
    En reprenant la ligne de départ:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> a = r"#353= IFCPROPERTYSINGLEVALUE('Charge d''\X2\00E9\X0\clairage sp\X2\00E9\X0\cifi\X2\00E9\X0\e par surface',$,IFCREAL(10.7639104167097),$);"
    >>> a
    "#353= IFCPROPERTYSINGLEVALUE('Charge d''\\X2\\00E9\\X0\\clairage sp\\X2\\00E9\\X0\\cifi\\X2\\00E9\\X0\\e par surface',$,IFCREAL(10.7639104167097),$);"
    >>> a.replace(s, 'XXXX')
    "#353= IFCPROPERTYSINGLEVALUE('Charge d''\\X2\\00E9\\X0\\clairage sp\\X2\\00E9\\X0\\cifi\\X2\\00E9\\X0\\e par surface',$,IFCREAL(10.7639104167097),$);"
    >>> a.replace(r'\X2\00E9\X0\ '[:-1], 'XXXX')
    "#353= IFCPROPERTYSINGLEVALUE('Charge d''XXXXclairage spXXXXcifiXXXXe par surface',$,IFCREAL(10.7639104167097),$);"
    >>>
    çà fonctionne... et le soucis est alors du côté de vos données pas du '\' en fin de ligne ni de replace.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 74
    Par défaut
    Merci, je comprends un peu mieux le fonctionnement des "raw-strings"
    Le test console est ok, mais le r initial ayant été ajouté à la main, comment le rendre aussi valable dans mon code?
    comment dire que pour chaque ligne Line elle doit être prise comme r"Line" avant de la traiter?
    with open(path,'r') as f:
    for line in f:

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    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 754
    Par défaut
    Citation Envoyé par piploum Voir le message
    Le test console est ok, mais le r initial ayant été ajouté à la main, comment le rendre aussi valable dans mon code?
    "r" et '\' sont là pour aider à écrire une chaîne de caractères dans un script Python.
    Les bytes qui sont dans le fichier sont déjà écrits et c'est pas parce que vous voyez un '\' qu'il existe. Le seule façon de "voir" est d'afficher vos lignes après avoir ouvert le fichier en mode binaire voire de forcer la ré-écriture de ces lignes en hexadécimal.

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

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/08/2011, 11h59
  2. [SQL] Requête à jointure qui ne fonctionne pas
    Par Bensor dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/12/2004, 16h10
  3. Jointure externe qui ne fonctionne pas
    Par Guizz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/02/2004, 12h26
  4. CREATEFILEMAPPING qui ne fonctionne pas???
    Par Jasmine dans le forum MFC
    Réponses: 2
    Dernier message: 06/01/2004, 19h33
  5. UNION qui ne fonctionne pas
    Par r-zo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/07/2003, 10h04

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