Forum Programmation.python Lecture d'un fichier avec caractères accentués

Posté par  .
Étiquettes : aucune
0
29
juin
2004
Bijour forum

Pouf une question sur Python :
je dispose d'un fichier CSV (données séparées par des virgules) et je m'écris un parseur en python (je n'ai pas besoin qu'on me donne un parseur tout fait, le mien convient largement !)
Le problème c'est qu'il y a des accents dans les données, et j'arrive pas à les utiliser correctement !
Mon fichier CSV est en iso-8859-15, le script python aussi (# -*- encoding....)
Voici ce qu'il me donne sur une ligne contenant un accent :
['117', 'CE2 A', '0', 'Ext\xe9rieur']
Vous voyez, le quatrième champ est mal lu ou mal affiché.
comment résoudre ce problème ?

Merci d'avance
  • # Tout ça m'a l'air parfaitement normal...

    Posté par  . Évalué à 2.


    >>> liste = ['117', 'CE2 A', '0', 'Ext\xe9rieur']
    >>> liste[3]
    'Ext\xe9rieur'
    >>> print "%s"%liste[3]
    Extérieur
    >>>


    Ne pas confondre évaluation et affichage via la fonction print...
    • [^] # Re: Tout ça m'a l'air parfaitement normal...

      Posté par  . Évalué à 1.

      Ben moi j'affiche le texte avec
      print fichier.lignes
      fichier.lignes est une liste de listes...
      Quand je fais
      print fichier.lignes[0]
      => ['117', 'CE2 A', '0', 'Ext\xe9rieur']
      Mais print fichier.lignes[0][3]
      => Extérieur
      Sauf que moi je veux afficher les listes intégralement, et pas un élément à la fois...
      • [^] # Re: Tout ça m'a l'air parfaitement normal...

        Posté par  . Évalué à 2.

        Sauf que moi je veux afficher les listes intégralement, et pas un élément à la fois...
           print "Salle %d / Classe %s / %d / %s" % fichier.lignes[0]
        
        Ah, la programmation... que d'efforts !!
        • [^] # Re: Tout ça m'a l'air parfaitement normal...

          Posté par  . Évalué à 1.

          Merci, un élément...
          Mais comment je fais quand je connais pas la longueur de la ligne ?
          • [^] # Re: Tout ça m'a l'air parfaitement normal...

            Posté par  . Évalué à 2.

            print ' ; '.join(fichier.lignes[0]) Mais enfin là ça ressemble un peu beaucoup à du csv... on est revenu à notre point de départ ! Si tu veux faire un minimum de traitement de tes données, il faut bien que tu en aies une connaissance a priori, donc il faut savoir quelle information est écrite dans telle ou telle colonne de ta feuille de calcul, et donc dans tel ou tel élément de ta liste... La conclusion de l'histoire c'est qu'il va bien te falloir à un moment décider quoi faire de taListe[0], taListe[1], taListe[2] et taListe[3], individuellement. Vu ce que tu comptes faire, tu pourras pas y couper...
      • [^] # Re: Tout ça m'a l'air parfaitement normal...

        Posté par  (site web personnel) . Évalué à 3.

        Il t'explique que tu utilises le "pretty printer" python de tableau, et non les fonctions nécessaires à afficher les valeurs contenues dans ton tableau. Selon le type de données qu'il contient il faudra en effet utiliser potentiellement des "pretty printer" spécifiques (par exemple si c'est un objet qui est dans le tableau..) car, probablement pour éviter tout soucis et par généricité, un pretty printer ne fera aucune supposition sur le codage utilisé dans le cas d'une chaîne.

        Notons que Ruby fait sensiblement pareil :

        [gc@meuh ~] irb
        irb(main):001:0> ary = [ 117, 'CE2 A', 0, 'Extérieur' ]
        => [117, "CE2 A", 0, "Ext\351rieur"]
  • # Titre

    Posté par  . Évalué à 2.

    Est-ce que c'est vraiment un problème ? Je ne crois pas :
    >>> texte = "éèàç"
    >>> texte
    '\xe9\xe8\xe0\xe7'
    >>> print texte
    éèàç
    

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.