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 :

je souhaite parvenir a remplir un tableur csv à partir d'une liste de dictionnaires


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 31
    Par défaut je souhaite parvenir a remplir un tableur csv à partir d'une liste de dictionnaires
    Bonjour à tous , aprés avoir résolu la moitié d'une enigme ma seconde moitié est d'arriver à remplir un tableau ou tableur CVS , à partir d'une suite de dictionnaires ,

    {'1QMF': [['guanidinium', '', 'ARG', '426', 'A'], ['hyd_ali', 'cd', 'ARG', '426', 'A'], ['bb', 'backbone', 'GLY', '647', 'A'], ['hyd_ali', '', 'ALA', '650', 'A'], ['hyd_ali', 'cbcg2', 'VAL', '662', 'A']], '2NT7': [['guanidinium', '', 'ARG', '254', 'A'], ['bb', 'backbone', 'GLY', '259', 'A'], ['hyd_ali', 'cb', 'MET', '258', 'A']], '2F6Z': [['guanidinium', '', 'ARG', '254', 'A'], ['bb', 'backbone', 'GLY', '259', 'A'], ['hyd_ali', 'cb', 'MET', '258', 'A']], '3U2V': [['guanidinium', '', 'ARG', '77', 'B'], ['bb', 'backbone', 'GLY', '215', 'B'], ['hyd_ali', 'cbcg', 'LEU', '214', 'B']], '3A9E': [['guanidinium', '', 'ARG', '321', 'A'], ['bb', 'backbone', 'ALA', '332', 'A'], ['hyd_ali', '', 'ALA', '276', 'A']], '2ZI6': [['guanidinium', '', 'ARG', '2192', 'B'], ['bb', 'backbone', 'ALA', '2031', 'B'], ['hyd_ali', 'cb', 'ARG', '2188', 'B']], '1X7Z': [['guanidinium', '', 'ARG', '220', 'A'], ['bb', 'backbone', 'GLY', '192', 'A'], ['hyd_ali', '', 'ALA', '195', 'A']]}

    je souhaite prendre les champs en gras dans une premiere colonne

    en italique dans une autre colonne , mon format de sortie est ici sumo out.xlsx


    j'arrive a avoir des tableau à partir de nombres numériques mais je suppose que des chaines de caractéres est plus laborieux !!! mais je cherche un debut de logique pour y arriver
    par exemple avec des nombres on peut faire ca
    juste un exemple pour me donner une idée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    with open('fichier.csv', 'wb') as f:
        fcsv = csv.writer(f, delimiter=';', dialect=csv.excel)
        for x1, x2, x3, x4 in file:
            x2 = ("%10.5f" % (x2,)).replace('.', ',')
            x3 = ("%10.5f" % (x3,)).replace('.', ',')
            x4 = ("%10.5f" % (x4,)).replace('.', ',')
            fcsv.writerow([x1, x2, x3, x4])
     
    fichier.close()

    merci par avance

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 778
    Par défaut
    Salut,

    Pour mettre en forme des données à partir d'une telle horreur, le plus simple est de se servir de la console.
    On cache l'horreur dans une variable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >>> data = {'1QMF': [['guanidinium', '', 'ARG', '426', 'A'], ['hyd_ali', 'cd', ' ...
    Puis on pioche dedans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> for k, v in data.items():
    ...     print ([ k ] + v[0][:4])
    ...
    ['1QMF', 'guanidinium', '', 'ARG', '426']
    ['3A9E', 'guanidinium', '', 'ARG', '321']
    ['3U2V', 'guanidinium', ...
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 31
    Par défaut
    Merci de ton aide préciseuse , par contre à partir d'une liste de nombres , je parviens à afficher en ordre et de façon ordonnée un tableau , mais le principe n'est pas tout à fait le meme avec un dictionnaire etant donnée qu'il y'a des clés et des valeurs , lke truc c'est que je veux relier ce que tu m'as indiqué et
    fcsv = csv.writer(f, delimiter=';', dialect=csv.excel) pour concatener le tout , c'est faisable ce que j'essaye de faire ????

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    # ecrire le fichier csv
    with open('fichier.csv', 'wb') as f:
     
        fcsv = csv.writer(f, delimiter=';', dialect=csv.excel)
        for  ([k] + v [0][:4])in  data:
            k = ("%10.5f" % (k,)).replace('.', ',')
            v = ("%10.5f" % (v,)).replace('.', ',')
     
            fcsv.writerow([k, v])
    SyntaxError: can't assign to operator



    il me met cette erreur , je m'excuse de toujours venir à vous , , j'ai compris le principe , je connais les outils , je pioche toujours en ayant des ambuches ,

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Je suppose que c'est ici que l'erreur est levée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       for  ([k] + v [0][:4])in  data:
    ça ne veut rien dire pour Python, si v représente la valeur alors tu peux écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        for k, v in data.items():
            k = ("%10.5f" % (k,)).replace('.', ',')
            v = ("%10.5f" % (v[0][:4],)).replace('.', ',')
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        for k in data:
            k = ("%10.5f" % (k,)).replace('.', ',')
            v = ("%10.5f" % (data[k][0][:4],)).replace('.', ',')

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 31
    Par défaut
    je suppose que si il me génére ce type d'erreur " float argument required, not str" comme erreur , "%10.5f" % le probleme viendrait de ce type d'ecriture ????

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 778
    Par défaut
    Citation Envoyé par they_are_numbers Voir le message
    je suppose que si il me génére ce type d'erreur " float argument required, not str" comme erreur , "%10.5f" % le probleme viendrait de ce type d'ecriture ????
    Un ordinateur s'applique a essayer d’exécuter ce que vous lui ordonnez.
    Dans le meilleur des cas, il se vautre avec un message d'erreur qu'il vous faut décoder.
    Le pire c'est quand l'erreur se déclenche plus loin.

    Il est tout a fait licite d'écrire "%10.5f" pourvu que l'argument soit un float.
    Est ce que le soucis vient du format ou de l'argument?
    Il n'y a que vous pour "savoir" ce qui doit être et quoi corriger.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 31
    Par défaut
    merci wiztricks pour votre suivi durant ce probléme posé , cependant , vous vous en doutez surment que mon niveau en programmation python , est loin d'etre au point, parfait , ceci ne m'empéche pas de vouloir chercher encore , et à apprendre des erreurs que je commet au fure et à mesure , , et j'ai conscience que tout programme informatique python et autre est laborieux , donc merci pour les réponses et eclaircissements apportés au fur et à mesure ,

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 778
    Par défaut
    Salut,

    Un truc comme "for ([k] + v [0][:4])in data:" c'est pas vraiment du Python!
    Pourquoi jouer avec des "float" - "%10.5f" - alors que dans le premier post vous n'aviez que des "strings"?

    Si ce que vous voulez n'est pas plus clair, çà va pas le faire.
    Désolé.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. [Python 3.X] Générer un fichier CSV à partir d'une liste
    Par blueice dans le forum Général Python
    Réponses: 1
    Dernier message: 20/04/2015, 15h38
  2. remplir des champs a partir d'une liste
    Par piotrowski-s dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 05/07/2012, 15h14
  3. Réponses: 3
    Dernier message: 14/07/2009, 15h10
  4. Réponses: 3
    Dernier message: 03/05/2009, 09h56
  5. Remplir un planning a partir d'une liste complexe
    Par deca2 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 30/10/2008, 12h06

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