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 :

gérer du csv, soucis d'encodage


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 415
    Par défaut gérer du csv, soucis d'encodage
    bonjour j'ai pris ça sur internet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def dictionnaire():
        #utilise le fichier dictionnaire.csv du meme dossier
        f = open('dico2_macosroman.csv', 'r')
        with f:
            reader = csv.reader(f)
            for row in reader:
                for e in row:
                    print(e)
     
    dictionnaire()
    j'ai essayé avec un fichier csv encodé en UNICODE, mais j'ai cru lire quelque part que le module csv ne gérait pas le unicode
    alors j'ai essayé avec un fichier enregistré au format "occidental, mac os roman"
    pareil
    voici le message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/encodings/ascii.py", line 26, in decode
        return codecs.ascii_decode(input, self.errors)[0]
    UnicodeDecodeError: 'ascii' codec can't decode byte 0x8e in position 31: ordinal not in range(128)
    j'utilise python 3.6.5 et textedit sous mac os 10.12.6

    Vincent

  2. #2
    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,

    Citation Envoyé par elodouwen Voir le message
    j'ai essayé avec un fichier csv encodé en UNICODE, mais j'ai cru lire quelque part que le module csv ne gérait pas le unicode
    Python ne connaît pas l'encoding de vos fichiers. Donc soit, c'est l'encoding par défaut (le plus souvent utf-8 avec Python3 mais çà peut être autre chose suivant l'environnement et la configuration) soit il faut le préciser à l'open du fichier.

    Citation Envoyé par elodouwen Voir le message
    j'ai essayé avec un fichier csv encodé en UNICODE, mais j'ai cru lire quelque part que le module csv ne gérait pas le unicode
    Tout à fait mais çà c'était "avant" i.e. avec Python2.
    Avec Python3, il sait le faire...

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

  3. #3
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 415
    Par défaut
    ok merci j'ai donc mis tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def dictionnaire():
        #utilise le fichier dictionnaire.csv du meme dossier
        f = open('dictionnaire.csv', 'r', encoding='utf-8')
        with f:
            reader = csv.reader(f)
            for row in reader:
                    print(row)
    et ça marche nickel

  4. #4
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 415
    Par défaut
    je poursuis dans ce fil car je ne sais pas si oui ou non le souci est de même nature
    voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        f = open('dictionnaire_consulter.csv', 'w',encoding='utf-8')
        with f:
            writer = csv.writer(f)
            for row in L:
                print(row[0])
                chiffre=str(row[0]),"-----"
                writer.writerow(chiffre)
                for mots in row[1]:
                    print((mots))
                    writer.writerow((mots))
    l'instruction "print(mots)" renvoie... des mots ou des phrase, style :
    abc
    bonjour
    la veillée de Noël
    bref exactement ce qui est dans L
    pour info voici à quoi ressemble mon L
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    L=[(3, ['a', 'c']), (45, ['la veillée de Noël'])]
    par contre
    l'instruction writer.writerow((mots)) écrit dans le fichier concerné les mots avec les lettres séparées par des virgules...
    style :
    a,b,c
    b,o,n,j,o,u,r
    j'ai essayé de chercher du côté de "delimiter" mais ça ne prend que des chaînes d'un seul caractère, pas des chaînes vides
    je ne sais pas trop quoi faire là...

  5. #5
    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,
    Citation Envoyé par elodouwen Voir le message
    je poursuis dans ce fil car je ne sais pas si oui ou non le souci est de même nature
    S'agit-il du problème d'encoding initial?

    Citation Envoyé par elodouwen Voir le message
    je ne sais pas trop quoi faire là...
    Il faut ouvrir la documentation du module CSV pour essayer de comprendre à quoi ressemble le paramètre à passer à .writerow.
    Ceci dit, "writerow" c'est écrit ligne... donc sachant que la fonction va ajouter les bons delimiters, si vous deviez l'écrire, vous feriez comment? Et quelle serait la représentation commode de cet argument?

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

  6. #6
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 415
    Par défaut
    le problème d'encoding initial (en lecture donc) était résolu
    quant à vos questions, je vous remercie de m'aider à trouver des pistes mais je saisis mal
    si je devais l'écrire, vous voulez dire écrire la fonction writerow ?
    ce que je ne comprend pas c'est que le print((mots)) affiche parfaitement les mots dans la console, tandis que le writer.writerow((mots)) sépare les lettres avec des virgules
    j'ai fouillé dans la doc de csv (j'ai peut être mal fouillé mais j'y ai passé du temps) ainsi que sur internet, je ne trouve que des documentations semblables sur le paramètre delimiter mais il me semble que ce n'est pas le bon angle d'attaque
    il y a qqch à comprendre sur le fait que par défaut il affiche des mots dont les lettres sont séparées par des virgules
    je nage....

Discussions similaires

  1. [CSV] Problème d'encodage
    Par simoryl dans le forum Langage
    Réponses: 13
    Dernier message: 18/04/2012, 15h20
  2. Formulaire CGI, soucis d'encodage
    Par Olivier Regnier dans le forum Web
    Réponses: 0
    Dernier message: 22/01/2008, 12h57
  3. Souci d'encodage UTF-8 (config non prise en compte)
    Par Assimil dans le forum Zend Studio
    Réponses: 6
    Dernier message: 03/07/2007, 12h38
  4. [CSV] conflit d encodage
    Par philippe123 dans le forum Langage
    Réponses: 3
    Dernier message: 01/08/2006, 13h56
  5. [C#][CSV] souci d'encodage
    Par papouAlain dans le forum Windows Forms
    Réponses: 6
    Dernier message: 20/12/2005, 16h48

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