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 :

python et fichier .CSV


Sujet :

Python

Vue hybride

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

    Informations forums :
    Inscription : Février 2007
    Messages : 252
    Par défaut python et fichier .CSV
    Bonsoir à tous,
    j'ai des données de toutes sortes (chiffres, lettres et un melange des deux) dans un fichier .CSV (fichier que j'ai telechargé du web et sur lequel je dois effectuer des traitements).
    Alors, j'arrive à l'ouvrir mais je souhaite recuperer les champs de la premiere pour en faire les clés d'un dictionnaire?
    Comment puis-je faire cela?
    Avez de la doc sur python et fichier csv?

    Merci
    Billie

  2. #2
    Membre émérite
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Par défaut
    T'as pensé regarder la documentation avant de venir poser ta question? Spécialement, la section qui explique le module csv?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 252
    Par défaut
    salut a tous,
    Je te remercie pour ta remarque mais j'ai pensé a le faire.
    En fait voila ce que j'ai ecrit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import csv
     
    fichier=open('C:\Users\jocelyne\Desktop\Data\Origin_and_Destination_Survey_DB1BCoupon_2007_1.csv', 'rb')
    fichiercsv = csv.reader(fichier, delimiter = ",")
     
    #for ligne in fichiercsv:
     #   print ligne[0]
     
    reader = csv.DictReader(fichier)
    for row in reader:
        print row
     
    fichier.close()

    et voila une des lignes du résultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    {'ItinID,"MktID","SeqNum","Coupons","Year","Quarter","Origin","OriginAptInd","OriginCityNum","OriginCountry","OriginStateFips","OriginState","OriginStateName",
    "OriginWac","Dest","DestAptInd","DestCityNum","DestCountry","DestStateFips","DestState","DestStateName","DestWac","Break","CouponType","TkCarrier",
    "OpCarrier","RPCarrier","Passengers","FareClass","Distance","DistanceGroup","Gateway","ItinGeoType","CouponGeoType",': '200713540007,"200716345063",5,6,2007,1,"IAH",1,37320,"US","48","TX","Texas",74,"CLT",0,17960,"US","37","NC","North Carolina",36,"","A","US","YV","ZW",1.00,"X",913.00,2,0.00,2,2,'}
    et il me reaffiche la mm structure pour toutes les autres lignes de mon fichier csv. toutes les lignes de mon fichier csv se terminent par une virgule et vous retrouverez cela dans le resultat ci-dessus, comment puis je faire pour les enlever?
    est ce normal le resultat que j'obtiens avec DICTREADER ou l'ai-je mal utilisé?

    Merci
    Billie

    Edité par Guigui_: merci à l'avenir d'utiliser les balises [CODE]

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Par défaut
    A quoi te sert fichiercsv alors que tu n'utilises que fichier partout ailleurs ?
    D'autant que fichiercsv est le seul qui a une information concernant le délimiteur.

    Tu as regardé ces exemples ?
    http://docs.python.org/lib/csv-examples.html

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par billyrose Voir le message
    salut a tous,
    Je te remercie pour ta remarque mais j'ai pensé a le faire.
    En fait voila ce que j'ai ecrit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import csv
     
    fichier=open('C:\Users\jocelyne\Desktop\Data\Origin_and_Destination_Survey_DB1BCoupon_2007_1.csv', 'rb')
    fichiercsv = csv.reader(fichier, delimiter = ",")
     
    #for ligne in fichiercsv:
     #   print ligne[0]
     
    reader = csv.DictReader(fichier)
    for row in reader:
        print row
     
    fichier.close()

    et voila une des lignes du résultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    {'ItinID,"MktID","SeqNum","Coupons","Year","Quarter","Origin","OriginAptInd","OriginCityNum","OriginCountry","OriginStateFips","OriginState","OriginStateName",
    "OriginWac","Dest","DestAptInd","DestCityNum","DestCountry","DestStateFips","DestState","DestStateName","DestWac","Break","CouponType","TkCarrier",
    "OpCarrier","RPCarrier","Passengers","FareClass","Distance","DistanceGroup","Gateway","ItinGeoType","CouponGeoType",': '200713540007,"200716345063",5,6,2007,1,"IAH",1,37320,"US","48","TX","Texas",74,"CLT",0,17960,"US","37","NC","North Carolina",36,"","A","US","YV","ZW",1.00,"X",913.00,2,0.00,2,2,'}
    et il me reaffiche la mm structure pour toutes les autres lignes de mon fichier csv. toutes les lignes de mon fichier csv se terminent par une virgule et vous retrouverez cela dans le resultat ci-dessus, comment puis je faire pour les enlever?
    est ce normal le resultat que j'obtiens avec DICTREADER ou l'ai-je mal utilisé?

    Merci
    Billie

    Edité par Guigui_: merci à l'avenir d'utiliser les balises [CODE]
    Déj) étant donné qu'un CSV est un fichier texte, on se demande pourquoi tu l'ouvres en mode binaire. Maintenant si tu faisais ça "à la mano" (comme si le module csv n'existait pas) c.a.d. tout simplement ???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/usr/bin/env python
     
    file=open('C:\Users\jocelyne\Desktop\Data\Origin_and_Destination_Survey_DB1BCoupon_2007_1.csv', 'r')
     
    dict={}
    for ligne in file:
        tabChamp=ligne.split(",")
        dict[tabChamp[0]]=tabChamp[1:]
    file.close()
     
    for k, v in dict.items():
        print "key=[%s] - value=[%s]" % (k, v)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 252
    Par défaut
    Bonjour à tous,
    j'ai testé ce programme:

    import csv

    file=open('C:\Users\jocelyne\Desktop\Data\Origin_and_Destination_Survey_DB1BCoupon_2007_1.csv', 'r')

    dict={}
    for ligne in file:
    tabChamp=ligne.split(",")
    dict[tabChamp[0]]=tabChamp[1:]
    file.close()

    for k, v in dict.items():
    print "key=[%s] - value=[%s]" % (k, v)

    Le résultat obtenu est le suivant:
    key=["ItinID] - value=[['""MktID""', '""SeqNum""', '""Coupons""', '""Year""', '""Quarter""', '""Origin""', '""OriginAptInd""', '""OriginCityNum""', '""OriginCountry""', '""OriginStateFips""', '""OriginState""', '""OriginStateName""', '""OriginWac""', '""Dest""', '""DestAptInd""', '""DestCityNum""', '""DestCountry""', '""DestStateFips""', '""DestState""', '""DestStateName""', '""DestWac""', '""Break""', '""CouponType""', '""TkCarrier""', '""OpCarrier""', '""RPCarrier""', '""Passengers""', '""FareClass""', '""Distance""', '""DistanceGroup""', '""Gateway""', '""ItinGeoType""', '""CouponGeoType""', '"\n']]
    key=["200713540007] - value=[['""200716345063""', '6', '6', '2007', '1', '""CLT""', '0', '17960', '""US""', '""37""', '""NC""', '""North Carolina""', '36', '""RIC""', '0', '75820', '""US""', '""51""', '""VA""', '""Virginia""', '38', '""X""', '""A""', '""US""', '""US""', '""ZW""', '1.00', '""X""', '256.00', '1', '0.00', '2', '2', '"\n']]
    key=["200713540009] - value=[['""200716345066""', '2', '3', '2007', '1', '""PHL""', '1', '69880', '""US""', '""42""', '""PA""', '""Pennsylvania""', '23', '""DFW""', '3', '23208', '""US""', '""48""', '""TX""', '""Texas""', '74', '""""', '""A""', '""US""', '""US""', '""ZW""', '1.00', '""X""', '1302.00', '3', '0.00', '2', '2', '"\n']]
    key=["200713540008] - value=[['""200716345065""', '5', '5', '2007', '1', '""IAH""', '1', '37320', '""US""', '""48""', '""TX""', '""Texas""', '74', '""RIC""', '0', '75820', '""US""', '""51""', '""VA""', '""Virginia""', '38', '""X""', '""A""', '""CO""', '""CO""', '""ZW""', '1.00', '""X""', '1157.00', '3', '0.00', '2', '2', '"\n']]

    il me donne comme clés du dictionnaire, les données de la premiere colonne. or ce que moi je veux c'est que les clés du dictionnaire soient les champs de la premiere ligne.
    ie ces champs ci (excepté les [] et \n) :
    key=["ItinID] - value=[['""MktID""', '""SeqNum""', '""Coupons""', '""Year""', '""Quarter""', '""Origin""', '""OriginAptInd""', '""OriginCityNum""', '""OriginCountry""', '""OriginStateFips""', '""OriginState""', '""OriginStateName""', '""OriginWac""', '""Dest""', '""DestAptInd""', '""DestCityNum""', '""DestCountry""', '""DestStateFips""', '""DestState""', '""DestStateName""', '""DestWac""', '""Break""', '""CouponType""', '""TkCarrier""', '""OpCarrier""', '""RPCarrier""', '""Passengers""', '""FareClass""', '""Distance""', '""DistanceGroup""', '""Gateway""', '""ItinGeoType""', '""CouponGeoType""', '"\n']]

    pourkoi considere-t-il \n comme une valeur?

    merci d'avance
    Billie

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par billyrose Voir le message
    il me donne comme clés du dictionnaire, les données de la premiere colonne.
    Ah oui, c'est comme ça que je l'avais compris et programmé. Désolé

    Ce code devrait fonctionner
    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
     
    #!/usr/bin/env python
     
    file=open('C:\Users\jocelyne\Desktop\Data\Origin_and_Destination_Survey_DB1BCoupon_2007_1.csv', 'r')
     
    # Création du tableau des mots (tableau 2D)
    tabStrings=[]
    for (i, mot) in enumerate(file.readline().split(",")):
        # On crée une liste
        tabStrings.append([])
     
        # On initie cette liste avec le mot n° "i" de la première ligne
        tabStrings[i].append(mot)
     
    # Lecture du fichier
    for ligne in file:
        # Découpage des champs
        tabChamp=ligne.split(",")
     
        # On rajoute chaque mot de la ligne au tableau des mots
        for (i, mot) in enumerate(tabChamp):
            tabStrings[i].append(mot)
    file.close()
     
    # Ici on a un tableau 2D de mots indicés par le rang de chaque mot de la 1ère ligne
    # On va le transformer en dictionnaire
    dict={}
    for liste in tabStrings:
        dict[liste[0]]=liste[1:]
     
    for k, v in dict.items():
        print "key=[%s] - value=[%s]" % (k, v)
    On est obligé de le faire en 2 étapes qui sont
    - création d'une liste de tableau de mots
    - transformation de ce tableau en dictionnaire
    car si on tente de le faire en une étape en associant la clef à un rang pour y rajouter le mot de même rang, on n'est pas certain que la clef n° 1 sera renvoyée en premier

    Citation Envoyé par billyrose Voir le message
    pourkoi considere-t-il \n comme une valeur?

    merci d'avance
    Billie
    Le caractère "EOL" est différent entre Unix et Windows. Sur Unix, il est "\n". Sur Windows, il est "\r\n".
    Il est probable que ce fichier CSV ait été importé depuis Unix sans être converti.

    Te faut aller avec ce fichier sur un Unix et utiliser la commande "unix2dos". Puis le fichier résultat tu pourras le traiter sous Windows.
    Ou alors tu transfères ce fichier depuis Unix vers Windows par ftp en mode "text".
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. [Python 2.X] Créer un écrire un fichier de données avec Python ? Pas de CSV ou .txt !
    Par Ben20 dans le forum Général Python
    Réponses: 5
    Dernier message: 16/04/2015, 12h22
  2. Réponses: 4
    Dernier message: 26/03/2014, 15h30
  3. [CODE] Python 3.2 : lecture d'un fichier .csv
    Par Monkey B. Goode dans le forum Général Python
    Réponses: 2
    Dernier message: 28/06/2012, 17h45
  4. conversion d'un fichier csv en un tableau python
    Par titou_170 dans le forum Calcul scientifique
    Réponses: 3
    Dernier message: 25/11/2010, 11h40
  5. Mise à jour d'une table avec un fichier csv
    Par blackangel dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 26/05/2005, 14h46

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