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 :

Problème avec les accents


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut Problème avec les accents
    Bonjour,

    je souhaite créer un fichier texte contenant la liste des mots d'un texte. J'applique le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    f=open("myText.txt","r")
    contenu=f.read()
     
    f4=open("ListeMots.txt","w")
    mylist = contenu.split()
    f4.write(str(mylist))
    Le fichier myText est en UTF-8.

    S'il contient le texte suivant :

    La première fois qu'Arthur vit Sidonie.

    J'obtiens : ['La', 'première', 'fois', "qu'Arthur", 'vit', 'Sidonie']

    Par contre si le fichier myText contient "ce jour-là" en plus :

    La première fois qu'Arthur vit Sidonie ce jour-là.


    J'obtiens : ['La', 'première', 'fois', "qu'Arthur", 'vit', 'Sidonie', 'ce', 'jour-lÃ']

    Sauriez-vous svp comment résoudre ce problème? Merci pour votre aide.

    Cordialement,
    Arsène

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut
    Je pensais avoir identifier le problème : le fichier ListeMots.txt s'enregistrait avec l'encodage ANSI. J'ai modifié le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f4=open("ListeMots.txt","w",encoding="utf-8")
    Mais le résultat est le même. J'ai toujours ['La', 'première', 'fois', "qu'Arthur", 'vit', 'Sidonie', 'ce', 'jour-lÃ'] avec un encodage UTF-8.

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

    Lancez l'interpréteur Python:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> s = "La première fois qu'Arthur vit Sidonie ce jour-là."
    >>> s.split()
    ['La', 'première', 'fois', "qu'Arthur", 'vit', 'Sidonie', 'ce', 'jour-là.']
    Encodé utf-8, çà donne cette suite de bytes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> str(s.split()).encode('utf-8')
    b'[\'La\', \'premi\xc3\xa8re\', \'fois\', "qu\'Arthur", \'vit\', \'Sidonie\', \'ce\', \'jour-l\xc3\xa0.\']'
    Si on l'écrit dans un fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> f = open('test.txt', 'w', encoding='utf-8')
    >>> f.write(str(s.split()))
    75
    >>> f.close()
    si on relit çà sous forme de bytes, on vérifie qu'on y retrouve ses petits:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> open('test.txt', 'rb').read()
    b'[\'La\', \'premi\xc3\xa8re\', \'fois\', "qu\'Arthur", \'vit\', \'Sidonie\', \'ce\', \'jour-l\xc3\xa0.\']'
    et on peut aussi s'assurer que çà decode "bien":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> open('test.txt', 'r', encoding='utf-8').read()
    '[\'La\', \'première\', \'fois\', "qu\'Arthur", \'vit\', \'Sidonie\', \'ce\', \'jour-là.\']'
    >>> str(s.split())
    '[\'La\', \'première\', \'fois\', "qu\'Arthur", \'vit\', \'Sidonie\', \'ce\', \'jour-là.\']'
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut
    J'ouvre la console et je mets ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> s = "La première fois qu'Arthur vit Sidonie ce jour-là."
    >>> s.split()
    ça me donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ['La', 'première', 'fois', 'quArthur', 'vit', 'Sidonie', 'ce', 'jour-là.']
    >>>
    C'est bon jusque là. Ensuite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >>> str(s.split()).encode('utf-8')
    ça me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     b"['La', 'premi\xc3\xa8re', 'fois', 'quArthur', 'vit', 'Sidonie', 'ce', 'jour-l\xc3\xa0.']"
    OK. puis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> f = open('myText.txt', 'w', encoding='utf-8')
    >>> f.write(str(s.split()))
    74  (et non 75?)
    >>> f.close()
    Ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> open('myText.txt', 'rb').read()
    b"['La', 'premi\xc3\xa8re', 'fois', 'quArthur', 'vit', 'Sidonie', 'ce', 'jour-l\xc3\xa0.']"
    Et je décode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> open('myText.txt', 'r', encoding='utf-8').read()
    "['La', 'première', 'fois', 'quArthur', 'vit', 'Sidonie', 'ce', 'jour-là.']"
    >>>

    Tout est bon.

    Donc ce code devait fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    f=open("myText.txt","r")
    contenu=f.read()
    f.close()
    f4=open("ListeMots.txt","w",encoding="utf-8")
    f4.write(str(contenu.split()))
    f4.close()
    Mais j'ai toujours le problème sur les caractères accentués.

  5. #5
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    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 062
    Par défaut
    quArthur ≠ qu'Arthur

    Donc ce code devait fonctionner
    Non, regardez ce que vous avez écrit dans l'interpréteur et ce que vous écrivez dans le code.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut
    Ok, ça c'est pour le 74 au lieu du 75.

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

Discussions similaires

  1. XMLHTTP, problèmes avec les accents
    Par Berliozz dans le forum ASP
    Réponses: 4
    Dernier message: 21/06/2006, 11h32
  2. AJAX : Problème avec les accents...
    Par @drien dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 29/01/2006, 14h33
  3. Petit problème avec les accents circonflexes...
    Par Harvester dans le forum Autres Logiciels
    Réponses: 8
    Dernier message: 29/11/2005, 18h44
  4. [HTML][Encodage] Problèmes avec les accents...
    Par eraim dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 26/05/2004, 10h11
  5. [JDBC] Problème avec les accents
    Par seawolfm dans le forum Administration
    Réponses: 2
    Dernier message: 29/01/2004, 14h56

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