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 :

Lecture fichier CSV contenant des caractères accentués


Sujet :

Python

  1. #1
    Membre actif
    Inscrit en
    Novembre 2003
    Messages
    543
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 543
    Points : 239
    Points
    239
    Par défaut Lecture fichier CSV contenant des caractères accentués
    Bonjour,

    J'ai un fichier CSV contenant exactement les informations suivantes (il s'agit du code APE, activité principale des établissements) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Code;Libellé
    0111Z;Culture de céréales (à l'exception du riz), de légumineuses et de graines oléagineuses
    0112Z;Culture du riz
    0113Z;Culture de légumes, de melons, de racines et de tubercules
    0114Z;Culture de la canne à sucre
    0115Z;Culture du tabac
    0116Z;Culture de plantes à fibres
    Lorsque j'essaie de le lire avec le programme suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/usr/bin/python
    # -*- coding: latin-1 -*-
    import csv
    Fichier = open('CODESAPE.CSV', 'rb')
    CSVReader = csv.reader(Fichier,delimiter=';')
    for Ligne in CSVReader : 
    	print(Ligne[0],'===',Ligne[1])
    Fichier.close()
    J'obtiens mes données, mais avec un codage bizarre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ('Code', '===', u'Libell\xe9')
    ('0111Z', '===', u"Culture de c\xe9r\xe9ales (\xe0 l'exception du riz), de l\xe9gumineuses et de graines ol\xe9agineuses")
    ('0112Z', '===', u'Culture du riz')
    ('0113Z', '===', u'Culture de l\xe9gumes, de melons, de racines et de tubercules')
    ('0114Z', '===', u'Culture de la canne \xe0 sucre')
    ('0115Z', '===', u'Culture du tabac')
    ('0116Z', '===', u'Culture de plantes \xe0 fibres')
    Quelqu'un sait-il comment faire pour leur redonner leurs accents ?

    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    enlevez simplement les parenthèses dans print(...), cela devrait suffire.

    @+.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Re-bonjour,

    Si vous êtes intéressée par du code conforme à PEP 8 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/usr/bin/python
    # -*- coding: latin-1 -*-
     
    import csv
     
    with open("CODESAPE.CSV") as csvfile:
        reader = csv.reader(csvfile, delimiter=";")
        for line in reader:
            print "{} === {}".format(*line)
        # end for
    # end with
    @+.

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Ben, ton fichier est encodé, donc faut décoder.

    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
     
    Python 2.7.3 (default, Dec 18 2014, 19:03:52) 
    [GCC 4.6.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import csv
    >>> inf = open("f.csv", "r")
    >>> c = csv.reader(inf, delimiter=';')
    >>> for l in c:
    ...     print ": ".join([i.decode('utf-8') for i in l])
    ... 
    0111Z: Culture de céréales (à l'exception du riz), de légumineuses et de graines oléagineuses
    0112Z: Culture du riz
    0113Z: Culture de légumes, de melons, de racines et de tubercules
    0114Z: Culture de la canne à sucre
    0115Z: Culture du tabac
    0116Z: Culture de plantes à fibres
    >>>

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Salut,

    Citation Envoyé par VinsS Voir le message
    Ben, ton fichier est encodé, donc faut décoder.
    C'est plus propre mais ce n'est pas obligatoire d'autant que le module CSV de Python 2 demande a ce que les fichiers soient ouvert 'rb' (i.e. en mode "binaire" plutôt qu'en mode "texte").

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

  6. #6
    Membre averti
    Avatar de sweetasnz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2012
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 212
    Points : 375
    Points
    375
    Par défaut
    oui, j'ai eu affaire avec ce genre de galère : il faut absolument que tu maitrises ton encodage du fichier que tu lis, et celui dans lequel tu écris.
    récupère l'encodage de ton fichier csv d'origine : utf8_bom, utf8, iso8859-1 ... what else ...
    regarde comment la méthode "reader" de ton objet CSV décode ton fichier (documentation et/ou code source directement) et tu auras les éléments pour :
    - soit définir le bon encodage (si la méthode csv.reader possède un paramètre gérant le type d'encodage)
    - soit tu te sers de librairies telle que "codecs (méthode reader/writer) " pour lire ton fichier avec le bon encodage et réécrire en celui qui est géré par "csv.reader"

    la maitrise de l'encodage, le nerf de la guerre en python : c'est la 1èere chose à maitriser.

    de manière générale, je conseille de tout passer en unicode, UTF8 et toujours se demander si je travaille avec le bon encodage

    petit rappel : les 256 premiers caractères (au sens de l'encodage de caractères, en gros, lettre sans accent et chiffre, qq symbôles basiques ...) sont gérés de manière identique qq soit l'encodage, si un caractères est hors ces 256, tu auras besoin de définir et maitriser l'encodage, donc autant le faire d'entrée de jeu.

  7. #7
    Membre actif
    Inscrit en
    Novembre 2003
    Messages
    543
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 543
    Points : 239
    Points
    239
    Par défaut
    Ok, je vais essayer les différentes solutions.

    Sur le dernier post :
    Citation Envoyé par sweetasnz Voir le message
    récupère l'encodage de ton fichier csv d'origine : utf8_bom, utf8, iso8859-1 ... what else ...
    regarde comment la méthode "reader" de ton objet CSV décode ton fichier (documentation et/ou code source directement) et tu auras les éléments pour :
    - soit définir le bon encodage (si la méthode csv.reader possède un paramètre gérant le type d'encodage)
    - soit tu te sers de librairies telle que "codecs (méthode reader/writer) " pour lire ton fichier avec le bon encodage et réécrire en celui qui est géré par "csv.reader"
    Ok, mais alors :
    1) Mon fichier est exactement comme ce que j'ai affiché. C'est du texte pur, avec les accents.
    Comment connaître alors son encodage ?
    2) Comment savoir comment fonctionne de la méthode reader ?

  8. #8
    Membre averti
    Avatar de sweetasnz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2012
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 212
    Points : 375
    Points
    375
    Par défaut
    Citation Envoyé par enicnath Voir le message
    Ok, je vais essayer les différentes solutions.

    Sur le dernier post :

    Ok, mais alors :
    1) Mon fichier est exactement comme ce que j'ai affiché. C'est du texte pur, avec les accents.
    Comment connaître alors son encodage ?
    2) Comment savoir comment fonctionne de la méthode reader ?
    attention, ce que tu vois ne reflète pas toujours la réalité de l'encodage.
    ton éditeur peut être paramétré par défaut sur UTF8, ou un autre, ce qui va t'afficher à l'écran est donc tout relatif à l'encodage par défaut de ton logiciel !!!
    le concept de "texte pur" ça n'existe que quand tu écris au stylo sur du papier ! en informatique c'est "codes+ encodage = lettre ou motif ou symbole ou chiffre ..." sinon les russes, arabes, chinois, grecs entre autres seraient bien embêtés

    toi tu veux savoir comment a été encodé ton fichier csv: c'est une "propriété" de ton fichier

    1. soit tu l'édites avec "notepad++" (où autre éditeur avec cette option sur l'encodage) et tu vas voir dans l'onglet "encodage"
    ou soit tu tapes un "file nomFichier.csv" dans une console shell linux
    et tu auras l'info (au passage ASCII = iso8859-1 je crois)

    avec notepad++ (mon éditeur préféré je dois avouer) : tu peux aussi CONVERTIR à un autre format et réenregistrer le fichier : attention conserve une copie d'origine au cas où pour revenir en arrière si besoin
    si tu ne l'as pas installé, je te le conseille : site officiel : http://notepad-plus-plus.org/fr/

    2. regarde l'aide en ligne de csv.reader, et google est ton ami pour la vie n'oublie pas
    sinon l'aide avec un interpréteur python : help(csv.reader)
    mais je viens de regarder vite fait, il n'y a rien de spécial sur les paramètres
    donc googlelise "encodage csv.reader" par exemple
    le cas de dernière chance, c'est d'éditer les fichiers sources py de ta librairie CSV (le fameux import csv réfèrent à des fichiers sources qq part dans ton arbo d'install python, en général pythonXX/Lib/sites-packages/) si ils sont disponibles et non compilés (pyc) et lire le code pour voir si tu as des infos sur l'encodage.

    est-ce suffisamment clair?

  9. #9
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    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 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Je me suis déjà "cogné" à ce problème d'encodage des fichiers csv avec Python 2. Heureusement, ce problème a disparu sous Python 3: il suffit d'ajouter l'encodage à l'ouverture (qui n'est pas une lecture binaire).

    Avec le csv de Python 2, il faut regarder en bas de la doc dans les exemples pour constater que le module csv ne supporte que l'utf-8. Dans les autres cas, il faut faire une conversion d'encodage avant le reader.

    Si ce problème de lecture n'a lieu qu'une fois ou rarement, la solution la plus pratique est de passer par notepad++.

    Si c'est à faire souvent, j'avais créé une fonction qui faisait automatiquement cette conversion en passant par un fichier virtuel en mémoire: cStringIO.

    Voilà en gros à quoi ça ressemble:

    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
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    # Python 2.7
     
    import codecs
    import cStringIO
    import csv
     
    def lirecsv(fichier, codisk):
        """lit le fichier CSV encodé codisk, et le retourne comme une 
           liste de listes unicode (tableau)
        """
        codcsv = "utf-8" # encodage supporté par le module csv
     
        # lit le fichier sur disque encodée codisk
        # et le met dans un fichier en ram avec encodage codcsv
        fs = cStringIO.StringIO()
        f = codecs.open(fichier, 'r', codisk)
        for ligne in f:
            fs.write(ligne.encode(codcsv))
        fs.seek(0) # pour remettre le curseur au début du fichier en ram
     
        #lit les lignes csv du fichier en ram et les convertit en liste de listes
        tableau = []
        for ligne in csv.reader(fs): # ajouter les options si nécessaires
            ligne = [elem.decode(codcsv) for elem in ligne] # utf-8 => unicode
            tableau.append(ligne)
        return tableau
     
     
     
    fichier = "monfichier.csv"
    codisk = "cp1252" # c'est l'encodage de Windows: à remplacer par celui qu'on veut!
    tableau = lirecsv(fichier, codisk)
    for ligne in tableau:
        for elem in ligne[:-1]:
            print elem, ',',
        print ligne[-1]
    Il ne faut pas oublier non plus que l'affichage doit aussi se faire dans l'encodage de la console utilisée, et que de toute façon Python 2 ne sait pas afficher correctement les caractères accentués dans une liste:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    print "éèçàùôï"
    éèçàùôï
    print ["éèçàùôï"]
    ['\xc3\xa9\xc3\xa8\xc3\xa7\xc3\xa0\xc3\xb9\xc3\xb4\xc3\xaf']
    !!!

    Conclusion: passer le plus vite possible en Python 3, sinon, vous continuerez à trimbaler des problèmes historiques...
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  10. #10
    Membre averti
    Avatar de sweetasnz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2012
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 212
    Points : 375
    Points
    375
    Par défaut
    oui en python3, ces PB n'existent plus donc bien d'accord avec tyrtamos.
    le PB, c'est quand tu bosses sur des technos n-1 pour ne pas dire n-2 et que ton boss ne veut rien savoir = politique de direction à la hauteur des compétences du dit-directeur et des bénéfices/risques de montée en version pour tes clients.
    bref, ça dépend du contexte (perso/pro) et de ce que tu veux/dois utiliser
    bon courage enicnath, je pense que tu as toutes les infos à présent pour trouver une solution qui correspond à tes contraintes et tes besoins.

  11. #11
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    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 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Oui, tu as raison sweetasnz! Dans les entreprises, on ne fait pas toujours ce qu'on veut.

    Mais si on parle de coût, il faut aussi parler de tout ce qu'il faut faire en plus avec Python 2 pour résoudre ces problèmes d'encodage. En ce qui me concerne, j'ai dû développer plusieurs modules de plusieurs dizaines de lignes pour ça, et même si j'ai toujours réussi ce que je voulais, je n'en ai pas gardé un très bon souvenir. Mais ouf: ils sont passés à la poubelle avec Python 3...

    Bref, dans certains cas, le passage à Python 3 peut être argumenté comme un bon investissement pour l'avenir. Et en tant que Dirigeant, c'est un argument que je comprends très bien...
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  12. #12
    Membre averti
    Avatar de sweetasnz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2012
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 212
    Points : 375
    Points
    375
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Oui, tu as raison sweetasnz! Dans les entreprises, on ne fait pas toujours ce qu'on veut.

    Mais si on parle de coût, il faut aussi parler de tout ce qu'il faut faire en plus avec Python 2 pour résoudre ces problèmes d'encodage. En ce qui me concerne, j'ai dû développer plusieurs modules de plusieurs dizaines de lignes pour ça, et même si j'ai toujours réussi ce que je voulais, je n'en ai pas gardé un très bon souvenir. Mais ouf: ils sont passé à la poubelle avec Python 3...

    Bref, dans certains cas, le passage à Python 3 peut être argumenté comme un bon investissement pour l'avenir. Et en tant que Dirigeant, c'est un argument que je comprends très bien...
    idem, j'ai du plusieurs fois coller des rustines et passer un temps fou sur ces questions... coût du dossier/presta +++ à répétition ... j'ai toujours un pincement quand je perds du temps comme cela
    effectivement, tu vois juste et je partage tes conclusions.
    le passage de 2 vers 3 dans ma boite, ce serait idéal mais pour l'instant la politique proactive de mon directeur technique fait défaut ... "trop de contrainte et/ou absence de décisions, manque de visibilité, possible incompétence/envie que je ne pourraient énumérées ici", cependant je reste toujours moteur pour ce genre d'argumentation et un jour viendra où "nous" y serons forcés donc "on" réagira faute d'anticiper
    Pour l'instant, on arrive à nos fins avec la v2, ce qui n'accélère pas les choses. Je vais soumettre à nouveau cette idée au prochain entretien ... qui sait ?

    si tu cherches un chef de projet... je suis tout ouie

    En tout cas, belle conclusion

  13. #13
    Membre actif
    Inscrit en
    Novembre 2003
    Messages
    543
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 543
    Points : 239
    Points
    239
    Par défaut
    Au passage, je suis bien en python 3, sous Linux
    Je programme en utilisant l'éditeur Scite. Quand j'appuie sur la touche F5, Scite exécute le programme et me renvoie les résultats.

    Sweetasnz, j'ai donc suivi ton conseil.
    Citation Envoyé par sweetasnz Voir le message
    1. soit tu l'édites avec "notepad++" (où autre éditeur avec cette option sur l'encodage) et tu vas voir dans l'onglet "encodage"
    ou soit tu tapes un "file nomFichier.csv" dans une console shell linux
    et tu auras l'info (au passage ASCII = iso8859-1 je crois)
    Ok, en faisant comme tu dis, "file nomFichier.csv", j'obtiens ISO-8859 text
    puis je suis allé sur l'aide en ligne de csv.reader, mais je n'y comprends pas grand chose.

    En fait, c'est vraiment étonnant qu'on ne puisse trouver un bout de ligne de code qui permette d'obtenir ce petit résultat !

  14. #14
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    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 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonsoir,

    Citation Envoyé par enicnath Voir le message
    En fait, c'est vraiment étonnant qu'on ne puisse trouver un bout de ligne de code qui permette d'obtenir ce petit résultat !
    Tu as essayé mon code?
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  15. #15
    Membre averti
    Avatar de sweetasnz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2012
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 212
    Points : 375
    Points
    375
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Bonsoir,
    Tu as essayé mon code?
    import cStringIO : c'est du pur python2, d'ailleurs, savez-vous l'équivalent Python3 pour cette Lib ? "io" ?

    sinon pour répondre au PB :
    - ton fichier est en iso-8859 : bien au moins maintenat tu sais !
    - tu lis ton fichier en iso-8859 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    csv = codecs.open('/path_to/test.csv','rb',encoding='iso8859-1').read()
    A ce stade "csv" est en "unicode" : c'est ce qu'on veut ! (voir autre option plus bas)
    - on ouvre un 2nd fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    csvUTF8 = codecs.open('c:/testUTF8.csv','wb',encoding='UTF8')
    Tu as donc un joli buffer encodé en UTF8
    - tu écris : - tu enregistres : - tu vérifies sous notepad++ l'encodage
    - tu reprends ton code avec la lib CSV (qui veut de l'utf8 de ce que j'ai compris)

    autre option :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    csv = codecs.open('/path_to/test.csv','rb',encoding='iso8859-1').readlines()
    for line in csv:
        # j'affiche de l'unicode ici (pour info : la petite lettre u devant la chaine : ex : print u'toto' != print 'toto')
        print line.split(';')
    autre option : comme disait tyrtamos, si tu as un fichier par mois, tu fais la conversion directement sous notepad++ : convertir en utf8 et enregistre le fichier

    conclusion : décode ton fichier "iso8859" et travaille sur de l'unicode ça téviteras des galères. et biensur tu écris tout en "utf8"

  16. #16
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Salut,

    Citation Envoyé par enicnath Voir le message
    Au passage, je suis bien en python 3, sous Linux
    Je programme en utilisant l'éditeur Scite. Quand j'appuie sur la touche F5, Scite exécute le programme et me renvoie les résultats.
    Si vous programmiez avec Python3, vous n'auriez pas le problème rencontré initialement avec le "print".
    Et si vous pouvez utiliser Python3, pas la peine de perdre notre temps à essayer de faire fonctionner la chose en Python2.

    Dit autrement, la question serait plutôt d'arriver à utiliser Python3, i.e. pourquoi vous vous retrouvez sous Python2 alors que vous n'avez pas de bonnes raisons pour...

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

  17. #17
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    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 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Citation Envoyé par enicnath Voir le message
    Au passage, je suis bien en python 3, sous Linux
    Alors là, je suis très étonné, ou alors ça a changé depuis le message initial: avec Python 3, on n'a pas d'affichage de chaines unicode avec un 'u' comme u'Culture du tabac'!

    Et effectivement, avec Python 3 il suffit d'ajouter l'encoding dans l'open.

    Bref, la prochaine fois je demanderai et j'attendrai la réponse avant de bosser...
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  18. #18
    Membre actif
    Inscrit en
    Novembre 2003
    Messages
    543
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 543
    Points : 239
    Points
    239
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Bonsoir,



    Tu as essayé mon code?
    Oui, j'obtiens ce message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 11: ordinal not in range(128)

  19. #19
    Membre actif
    Inscrit en
    Novembre 2003
    Messages
    543
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 543
    Points : 239
    Points
    239
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Si vous programmiez avec Python3, vous n'auriez pas le problème rencontré initialement avec le "print".
    Et si vous pouvez utiliser Python3, pas la peine de perdre notre temps à essayer de faire fonctionner la chose en Python2.

    Dit autrement, la question serait plutôt d'arriver à utiliser Python3, i.e. pourquoi vous vous retrouvez sous Python2 alors que vous n'avez pas de bonnes raisons pour...
    - W
    Ah erreur de ma part ; je viens de vérifier, je suis effectivement en Python2.
    Mais il vaudrait peut-être mieux que je passe en Python3 !

  20. #20
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    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 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Citation Envoyé par enicnath Voir le message
    Oui, j'obtiens ce message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 11: ordinal not in range(128)
    Je suis étonné de cette erreur: j'avais essayé ce code Python 2.7 sur un fichier csv issu d'Excel et encodé en "cp1252" avec des caractères accentués, et il fonctionne parfaitement.

    Pour cette erreur: il faut donner en plus la ligne dans laquelle elle est apparue. Sinon, on ne peut rien faire.

    Attention, une erreur de ce genre peut aussi apparaître dans le code d'affichage dans une console qui attend un autre encodage!

    Et oui: si tu peux passer en Python 3, fais-le!
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

Discussions similaires

  1. [AC-2003] Import de fichier CSV => Modification des caractères accentués
    Par Kloun dans le forum Access
    Réponses: 5
    Dernier message: 05/01/2011, 17h12
  2. import de fichier CSV : problème de caractères accentués
    Par mouaa dans le forum Administration
    Réponses: 2
    Dernier message: 08/08/2007, 07h45
  3. Réponses: 3
    Dernier message: 11/06/2007, 11h20
  4. Charger un fichier texte contenant des caractères
    Par dm_manu dans le forum MATLAB
    Réponses: 5
    Dernier message: 24/12/2006, 02h37
  5. [Upload] Nom de fichier avec un/des caractères accentués ?
    Par Christophe Charron dans le forum Langage
    Réponses: 11
    Dernier message: 09/06/2006, 21h46

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