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 :

Assembler 2 fichiers csv [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut Assembler 2 fichiers csv
    Bonjour,
    Je dispose de deux fichiers (en fait j'en aurais une dizaine au final) que je souhaiterais assembler. Le problème, c'est que les lignes ne sont pas dans le même ordre dans les deux (ou plus) fichiers.
    J'aurais besoin d'un ou de plusieurs avis sur la méthode à employer.

    Le premier est composé d'un classement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Joueur ; Classement officiel ; Classement réel
    Joueur A ; 100 ; 101
    Joueur B ; 95 ; 98
    Joueur C ; 90 ; 88
    Joueur D ; 80 ; 82
    Le deuxième est composé d'un classement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Joueur ; Classement officiel ; Classement réel
    Joueur A ; 100 ; 103
    Joueur D ; 80 ; 98
    Joueur C ; 90 ; 94
    Joueur B ; 95 ; 92
    Je souhaiterais obtenir un fichier csv comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Joueur ; Classement officiel ; Classement mois 1 ; Classement mois 2
    Joueur A ; 100 ; 101 ; 103
    Joueur D ; 80 ; 82 ; 98
    Joueur C ; 90 ; 88 ; 94
    Joueur B ; 95 ; 98 ; 92
    Il y a une petite centaine de joueurs.

    Ce que je pense de plus simple pour l'instant, mais cela peut être long, c'est de récupérer dans le dernier fichier la colonne 0 composée des joueurs et la colonne 1 du classement officiel, puis ensuite parcourir tous les fichiers csv et ajouter la valeur de la colonne 2 lorsque les noms correspondent. Cela implique de faire un test sur la colonne 0. C'est cette étape qui risque de prendre du temps mais je ne vois pas comment faire mieux.

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Si tes fichiers sont petits, tu lis tout, tu charges tout dans une structure (au hasard, une liste de dictionnaires avec le nom du joueur en clé et un set de positions de classement en valeurs), et tu pousses le tout dans un nouveau fichier.

    Après, j'ai du mal à voir comment tu peux avoir 3 descriptions de champs dans la ligne 1 et 4 valeurs dans les lignes suivantes...

  3. #3
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    OK, merci.
    Je modifie mon premier post pour que ce soit plus clair.
    Pour les dicos, j'avoue que ce n'est pas trop mon truc, d'autant qu'il faudra que mon dernier fichier soit classé.
    Après, c'est l'occasion de s'y mettre.

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Il existe une variante du dictionnaire, qui elle est ordonnée : l'OrderedDict.

    Et pareil je suis du même avis que Bktero.
    1) Tu créer un OrderedDict vide.
    2) Tu lis le 1er fichier (le 1er fichier dictant l'ordre sur le fichier de sortie)
    3) En lisant se fichier tu ajoutes les entrées à l'OrderedDict (chaque clé "JoueurX", va contenir une liste)
    4) Tu fermes le 1er fichier
    5) Tu ouvres les fichiers suivant, et pour chaque ligne, tu repère le nom du joueur, et ca te permet d'étendre la liste (avec les éléments à partir de la 2eme colonne) contenu dans l'OrderedDict correspondant à ce joueur précis.

  5. #5
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Merci à vous, mais je pense que je vais avoir un souci en passant par les dictionnaires.
    En effet, je n'ai pas tout dit :
    J'ai en fait à la place de Joueur A,, B, ... des noms en première colonne, prénoms en deuxième, ...
    Évidemment, deux joueurs peuvent avoir le même nom ou le même prénom.
    Pour la suite, j'ai besoin de garder noms et prénoms (j'imprime un pdf via latex)
    Du coup, il faudrait que je fasse en clé Nom + Prénom puis en valeur une liste qui va contenir [Nom, Prénom, Classement officiel, Classement mois 1, mois 2, ...]
    C'est possible de réaliser cela ?
    Sachant que pour la présentation finale, ce serait bien d'ordonner en fonction du classement officiel ou du dernier mois...

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Les dictionnaires acceptent des clés "composites" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    a = {}
    a[("Herve","Dupont")]=[80,82]
    a[("Albert","Dupont")]=[85,87]
    print(a)
    et si vous travaillez avec les ordereddict c'est pareil, suffit d'initialiser a comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    from collections import OrderedDict
    a=OrderedDict()

  7. #7
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 988
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 988
    Par défaut
    Pas besoin d'utiliser un orderedDict, il suffit de lire les fichiers dont tu ne veux pas conserver le classement et en utilisant le nom du joueur comme clef de stocker les colonnes dont tu as besoin dans un dict normal, puis de lire le fichier classé et d'écrire le résultat au fur et à mesure pour profiter du classement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mise à jour d'une table avec un fichier csv
    Par blackangel dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 26/05/2005, 14h46
  2. Importation de fichier CSV vers une base Interbase
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 15/03/2005, 15h18
  3. Mettre a jour BD avec fichier csv
    Par Looping94510 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 07/02/2005, 18h56
  4. Sortir un fichier csv sur base d une requete
    Par Freeman_80 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 12/01/2005, 11h21
  5. Réponses: 2
    Dernier message: 14/05/2004, 12h55

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