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 :

[CODE] Python 3.2 : lecture d'un fichier .csv


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [CODE] Python 3.2 : lecture d'un fichier .csv
    Bonjour à tous !

    Je cherche désespérément à résoudre un problème que je ne rencontre que sur la version 3.2 de python, puisque j'ai réussi avec la version 2.7.
    Je cherche en fait à importer des données financières depuis Yahoo finance, sous forme de fichier .csv pour les traiter ensuite avec python. Mais je n'arrive pas à ouvrir le fichier .csv correctement, une histoire de code ASCII, utf-8, mais je n'ai pas réussi à en savoir plus malgré Google et la doc Python... :/

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    url = "http://ichart.finance.yahoo.com/table.csv?s=BNP.PA&d=5&e=26&f=2012&g=d&a=0&b=1&c=2012&ignore=.csv"#adresse correcte
     
    def Write_url(code,nom,url):
        file = urllib.request.urlopen(url)
        reader = csv.DictReader(codecs.EncodedFile(file, 'ASCII'))         #Je pense avoir compris que c'est ici que ça coince...
        for row  in reader:
            print(row)
            cursor.execute("insert into "+str(nom)+" values (:Date, :Open, :High, :Low, :Close, :Volume);", row)
    Et le message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Write_url(code,nom,url)
        File "C:\Yahoo Finance fi.py", line 87, in Write_url
            for row in reader:
        File "C:\Python32\lib\csv.py", line 109, in __next__
            self.fieldnames
        File "C:\Python32\lib\csv.py", line 96, in fieldnames
            self._fieldnames = next(self.reader)
     csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)
    Je ne comprends pas... Sur la version 2.7 il suffisait de faire urllib.urlopen(url) puis csv.Dictreader() et ça marchait tout seul, mais là Python demande une manip en plus et je ne vois pas laquelle.

    Merci pour votre aide,
    Bonne soirée !

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

    Pour ton problème, tu es victime, comme beaucoup, du changement sur les string avec Python3.

    Si tu ouvres ton fichier avec l'argument 'b' ça change quelque chose ?

    Comme tu le charge sur le net, enregistre le d'abord.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci de ta réponse. Cependant, quelqu'un a su m'aider entre temps.
    Voici sa réponse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import codecs
    import csv
    import urllib.request
     
    url = 'http://ichart.finance.yahoo.com/table.csv?s=BNP.PA&d=5&e=26&f=2012&g=d&a=0&b=1&c=2012&ignore=.csv'
     
    f = urllib.request.urlopen(url)
    decode = codecs.getreader('utf-8')
    reader = csv.DictReader(decode(f))
    for row in reader:
        print(row)
    Ca a marché pour moi.
    Merci de votre aide, je n'hésiterai pas à revenir en cas de souci.

    Bonne soirée.

Discussions similaires

  1. [PYTHON/FORTRAN ( f2py )] Lecture ecriture de fichier
    Par squallmrs dans le forum Interfaçage autre langage
    Réponses: 7
    Dernier message: 28/06/2012, 08h48
  2. Réponses: 2
    Dernier message: 24/01/2008, 13h48
  3. Réponses: 3
    Dernier message: 03/01/2008, 12h14
  4. pb de lecture dans un fichier CSV
    Par MayOL69bg dans le forum C#
    Réponses: 3
    Dernier message: 23/05/2007, 14h21
  5. Linges sautées dans "lecture" d'un fichier .csv
    Par Mymi dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 10/08/2006, 20h02

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