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 :

Transposer plusieurs colonnes en une seule ligne ? [Python 2.X]


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Transposer plusieurs colonnes en une seule ligne ?
    Bonjour à tous,

    J'en viens à vous car je n'ai, à l'heure actuelle, encore pas su générer un script python valide.
    Voici ma situation, je dispose d'un fichier content plusieurs colonnes, ayant la disposition suivante :

    # Experience 001
    # Paramètres
    X Y Z
    # Responses
    A B C
    # Résultats (ID, Status, Parameters)
    0 DONE 7.300000000000000e-01 2.790000000000000e+00 7.695950995982525e-01
    1 DONE 5.906102008319327e-01 2.034495227105383e+00 5.141419565762536e-01
    2 DONE 5.653576337732376e-01 1.038657119165042e+00 3.678137489534882e-01
    3 DONE 7.362456493611846e-01 2.498055585127856e+00 7.228128358862473e-01
    4 DONE 6.147240922387157e-01 6.914118770509958e-03 2.351541276794892e-01
    5 DONE 6.559338493671800e-01 1.320089100660490e+00 4.434662023158628e-01
    6 DONE 6.752095198524850e-01 2.688730568225894e+00 6.728482593482707e-01

    L'idée étant de ne conserver QUE les colonnes contenant les résultats des paramètres, donc les trois dernières colonnes et de les concaténer sous forme de ligne, par exemple :

    7.300000000000000e-01 5.906102008319327e-01 5.653576337732376e-01 etc...

    Voici mon code actuel :

    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
     
    ##########################################
    #          CREATION SNAPSHOTS            #
    ##########################################
     
     
    #!/bin/bash
    #!/softs/python/2.6-RH6/bin/python
     
    import csv
     
    snapshots=file("snapshots.out", "w")
     
    donnees = open("table.csv", "r")
    donneescsv = csv.reader(donnees, delimiter=' ', lineterminator='\n')
    liste=[]
    for row in donneescsv:
            liste.append(row)
     
     
    snapshots.write(liste)
     
    donnees.close()
    snapshots.close()
    Je ne parviens pas à trouver la solution malheureusement


    Merci d'avance pour vos précieuses réponses !

  2. #2
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Points : 8 442
    Points
    8 442
    Par défaut
    un petit truc fait fissa (fonctionnel mais non optimisé)

    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
     
     
    ##########################################
    #          CREATION SNAPSHOTS            #
    ##########################################
     
     
    #!/bin/bash
    #!/softs/python/2.6-RH6/bin/python
     
    import csv
     
    snapshots=file("./snapshots.out", "w")
     
    donnees = open("./moncsv.csv", "r")
    donneescsv = csv.reader(donnees, delimiter=' ', lineterminator='\n')
    liste=[]
    for row in donneescsv:
            liste.append(row)
     
    for index, value in enumerate(liste):
        try:
            if int(value[0]) + 1:
                snapshots.write(str(value[2]) +  " " + str(value[3]) + " " + str(value[4]) + "\n")
        except:
            pass
     
    donnees.close()
    snapshots.close()
    Alors le "int(value[0]) + 1", le +1 c'est parce que pour la ligne 0, il va transtyper dasn le chiffre 0 qui veut aussi dire faux. Donc avec le +1 cela devient vrai. Sinon, on recupere le contenu de ta liste, on teste si le premier champ est un entier, et si oui, on écrit alors les éléments qui t'intéresse dans le fichier. Sinon, ben on passe au suivant.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Salut deusyss

    Merci beaucoup pour ta réponse.
    J'ai testé ton script, ça tourne bien mais mon fichier de sortie reste étrangement vide :/

    J'ai même tenté de généraliser le cas sans prendre certaines colonnes, mais résultat non concluant malheureusement

  4. #4
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Points : 8 442
    Points
    8 442
    Par défaut
    Euh... question conne mais bon: tu as bien remis à jour les noms de fichiers?? j'ai changé les nom (ligne 15)

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Oui les noms des fichiers ont bien été adaptés

  6. #6
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Points : 8 442
    Points
    8 442
    Par défaut
    OK, donc c'est pas ça. Chez moi cela fonctionnait, fichiers au même niveau que le script (windows 7 64 bits pro) en python 2.7. Ajoute un print ligne 24 pour voir déjà si ce qui sort te convient. Ensuite c'est surement pas un gros bug à résoudre . Accès fichier probablement.

    Verifie deja, j'attend ton retour

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Avec un print (que j'ai casé en dehors de la boucle), ça me sort bien ma liste tel que voulu en tout cas

    Je vais regarder ce qui bug au niveau du fichier de sortie

  8. #8
    Membre éprouvé
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Points : 926
    Points
    926
    Par défaut
    Citation Envoyé par benito_6220 Voir le message
    Avec un print (que j'ai casé en dehors de la boucle), ça me sort bien ma liste tel que voulu en tout cas

    Je vais regarder ce qui bug au niveau du fichier de sortie
    Bonsoir,
    Chez moi aussi le code de deusyss fonctionne parfaitement (python 3.4, Ubuntu).
    Sinon, ma petite proposition (pour de Python 3):
    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
    MARQ = "DONE"       # marqueur de ligne contenant des données
     
    # Lecture et remplissage de lst
    lst = []            # contiendra les valeurs à lire
    with open("table", "r") as donnees:
        for lig in csv.reader(donnees, delimiter = " "):
            if lig[1] == MARQ:
                lst.append(" ".join(lig[2:]))
     
    # Écriture des données
    with open("snapshots.out", "w") as snap:
        for lig in lst: snap.write(lig + "\n")
    Fichier snapshots.out:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    7.300000000000000e-01 2.790000000000000e+00 7.695950995982525e-01
    5.906102008319327e-01 2.034495227105383e+00 5.141419565762536e-01
    5.653576337732376e-01 1.038657119165042e+00 3.678137489534882e-01
    7.362456493611846e-01 2.498055585127856e+00 7.228128358862473e-01
    6.147240922387157e-01 6.914118770509958e-03 2.351541276794892e-01
    6.559338493671800e-01 1.320089100660490e+00 4.434662023158628e-01
    6.752095198524850e-01 2.688730568225894e+00 6.728482593482707e-01
    Voilà!!
    Après, s'il s'agit de récupérer des lignes et/ou colonnes particulière supplémentaires ce n'est plus qu'une adaptation!!

    Clodion

  9. #9
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Points : 8 442
    Points
    8 442
    Par défaut
    Donc ptet un probleme du côté de l'install, di on est deux a avoir le code fonctionnel

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Nickel tout tourne parfaitement maintenant.
    Aucune idée de ce qui a créé le bug


    Merci à vous deux pour votre aide !

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

Discussions similaires

  1. Transposer, 1 colonne sur une seule ligne
    Par Didpa dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/09/2013, 16h08
  2. Réponses: 2
    Dernier message: 29/03/2006, 16h36
  3. Plusieures infos sur une seule ligne avec ou sans tableau
    Par Him dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 17/03/2006, 14h16
  4. [VBA] Fusionner plusieurs colonnes en une seule
    Par brutos2 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 18/01/2006, 14h25
  5. plusieurs enregistrements dans une seul ligne
    Par Celelibi dans le forum Requêtes
    Réponses: 3
    Dernier message: 03/01/2005, 15h55

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