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 :

Tri dans fichier csv


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2008
    Messages : 41
    Points : 46
    Points
    46
    Par défaut Tri dans fichier csv
    Bonjour,
    J'ai un fichier csv du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    A;1
    A;2
    B;1
    C;1
    D;1
    D;2
    D;3
    et je souhaiterais ne garder que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    A;2
    B;1
    C;1
    D;3
    D'avance merci pour votre aide

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    je pense que le plus simple est de passer par un dictionnaire

    - split la ligne
    - on fait ensuite: dico[ligne[0]]=ligne[1]
    - tu n'aura plus qu'à récupérer les couples clé/valeur dans l'ordre alphabétique (ou non selon le besoin)

  3. #3
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2008
    Messages : 41
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par 6ril23 Voir le message
    je pense que le plus simple est de passer par un dictionnaire

    - split la ligne
    - on fait ensuite: dico[ligne[0]]=ligne[1]
    - tu n'aura plus qu'à récupérer les couples clé/valeur dans l'ordre alphabétique (ou non selon le besoin)
    Oui mais un dictionnaire l’intérêt c'est qu'il n'y ait pas de doublons sur la clé.
    J'arrive pas à trouver l'algo qui va bien
    Peut être avec 2 boucles imbriquées ?

  4. #4
    Membre du Club
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 48
    Points : 65
    Points
    65
    Par défaut
    Justement avec un dico il va t'écraser les valeurs précédentes pour la nouvelle et du coup tu n'auras que la dernière (visiblement c'est celle que tu veux).

  5. #5
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2008
    Messages : 41
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par Alliaël Voir le message
    Justement avec un dico il va t'écraser les valeurs précédentes pour la nouvelle et du coup tu n'auras que la dernière (visiblement c'est celle que tu veux).
    Ok je comprends .. , faut que j'arrive à faire un sort sur mon csv sur 2 colonnes du coup..
    Je vais essayer de pondre ça et d'en faire profiter la communauté..

  6. #6
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 478
    Points : 9 278
    Points
    9 278
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    On peut lire le fichier comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    with open("toto.csv", 'r') as f:
         L = []
         for ligne in f:
             L.append(ligne.split(';'))
    Ce qui donnera une liste de listes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    L = [['A',1], ['A',2],['B',1],['C',1],['D',1],['D',2],['D',3]]
    On peut effectivement utiliser un dictionnaire, mais le dictionnaire ne conservera pas l'ordre des termes (je ne sais pas si c'est important). Alors, on peut utiliser "OrderedDict" du module collections qui, lui, conservera l'ordre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    D = OrderedDict()
    for cle, valeur in L:
        D[cle] = valeur
     
    print D.items()
    [('A', 2), ('B', 1), ('C', 1), ('D', 3)]
    Cela suppose tout de même que, dans le fichier csv, pour une même lettre (par exemple 'D'), les nombres associés (1, 2, 3) soient bien dans l'ordre croissant, car ce sera seulement le dernier qui sera mémorisé.

  7. #7
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 751
    Points
    1 751
    Par défaut
    On peut aussi utiliser un dictionnaire comme suit si les valeurs sont rangées de façon anarchique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    with open("toto.csv", 'r') as f:
        Dico = {}
     
        for ligne in f:
            lettre, valeur = ligne.split(';')
     
            if lettre in Dico:
                Dico[lettre] = [valeur]
     
            else:
                Dico[lettre] += [valeur]
     
    for lettre, valeur in Dico.items():
        Dico[lettre] = max(valeur)

  8. #8
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2008
    Messages : 41
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par rambc Voir le message
    On peut aussi utiliser un dictionnaire comme suit si les valeurs sont rangées de façon anarchique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    with open("toto.csv", 'r') as f:
        Dico = {}
     
        for ligne in f:
            lettre, valeur = ligne.split(';')
     
            if lettre in Dico:
                Dico[lettre] = [valeur]
     
            else:
                Dico[lettre] += [valeur]
     
    for lettre, valeur in Dico.items():
        Dico[lettre] = max(valeur)
    Merci beaucoup, c'est ce que j'avais écrit avant de lire ta réponse

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/11/2011, 09h21
  2. [CSV] Tri de données dans fichier CSV
    Par PhilippeIEP dans le forum Langage
    Réponses: 6
    Dernier message: 08/10/2008, 10h48
  3. Problème de séparateur dans fichier CSV
    Par mbibim63 dans le forum Excel
    Réponses: 4
    Dernier message: 05/07/2007, 08h29
  4. Recherche dans fichier CSV
    Par psal78 dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 02/05/2007, 07h48
  5. Sauvegarde de données dans fichier csv
    Par issou dans le forum C
    Réponses: 1
    Dernier message: 22/12/2005, 08h36

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