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

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 31
    Points : 5
    Points
    5
    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 sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    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
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 31
    Points : 5
    Points
    5
    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 éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    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
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    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

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 31
    Points : 5
    Points
    5
    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 ????

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    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

  8. #8
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 31
    Points : 5
    Points
    5
    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 ,

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par they_are_numbers Voir le message
    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 ,
    Vous gagneriez du temps a ouvrir un tuto.
    Ils sont fait pour rendre l'apprentissage de la programmation moins laborieux, plus efficace.
    Sans avoir pris le temps d'assimiler objets et constructions de bases, n'importe quel bout de code sera "long" et "laborieux" à mettre au point alors que "programmer" est une activité ludique si vous pouvez voir rapidement des résultats.

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

  10. #10
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 553
    Points : 2 740
    Points
    2 740
    Par défaut
    Salut,

    la doc officielle te fourni toutes les infos dont tu as besoin pour faire ton formatage de chaines.
    (accessoirement, y a une autre façon de formater les chaine en python: la méthode format(), que je préfère personellement. mais les gouts et les couleurs, hein...)

    bref...
    tu cherches à afficher des chaines de caractère et tu utilises "%10.5f" comme format. et c'est effectivement une erreur.
    la doc de cet opérateur de formatage (%) explique que pour ton format "%10.5f":
    • % marque le début du format
    • 10 est la taille minimale de la sortie (10 caractères minimum)
    • .5 est la précision souahitée (5 chiffres après la virgule)
    • f est la conversion qui sera appliquée à ton entrée (f converti l'entrée en nombre flottant, un décimal quoi)



    ton format serait donc bon si tu cherchais à afficher des nombres décimaux, mais il n'est pas du tout adapté à l'affichage de chaine de caratères quelconques.
    il faut savoir que tous les paramètres qui suivent le "%" de ton format sont optionnels, qu'ils ne sont pas forcément utiles, mais qu'il faut au moins qu'ils correspondent à ce que tu veux afficher et aux données d'éntrée.

    maintenant que tu as les liens vers la doc, tu devrais pouvoir trouver quel format utiliser pour afficher tes chaines de caratère.

    edit:
    demande toi aussi si tu as réellement d'utiliser le formatage dans le cas présent...

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par Tryph Voir le message
    edit:
    demande toi aussi si tu as réellement d'utiliser le formatage dans le cas présent...
    D'autant que remplacer "print" par "writer.writerow" dans le bout de code déjà donné:
    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', ...
    devrait produire le résultat attendu.

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

  12. #12
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 31
    Points : 5
    Points
    5
    Par défaut
    Bonjour , aprés avoir écumé la doc en ligne , je suis enfin parvenu a traduire en langage python l'algorithme qui me sert a avoir le tableur dont j'ai besoin , sauf que j'ai toujours des difficultés avec soit la syntaxe , j'ai utilisé les expressions regulieres pour cela car ça m'a parut le moyen le plus efficace , pour reprendre ensuite mon code une fois qu'il aura fonctionner , je vous propose d'y jeter un coup d'oeuil j'essaye d'expliquer avec des comentaires a chaque fois ce que j'essaye de faire , : merci

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
     
    data = {'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']]}
     
     
    f=open("sumo.csv","wt")
    f.write(">data\t" +   "\n")
     
    for limite in data:
     
    #les en-tete des colonnes 
    	print  "Col1\tCol2\tCol3\tCol4\tCol5\tCol6\n" ;
     
     
    #la premiere ligne lis a partir de 1QMF jusqu'aux  ]] et ecris les elements dans un fichier de sortie en separant chaque colonne (bloc) par une tabulation 
     
    data=~ /^\{\'(\w+)\' : \[\[\'(\w+)\', \'(\w*)\', \'(\w+)\', \'(\d+)\', \'(\w+)\'\],\'(\w+)\', \'(\w*)\', \'(\w+)\' ,\'(\d+)\' , \'(\w+)\'\] , \[\' (\w+) \', \'(\w*)\',  \' (\w+) \', \' (\d+) \' , \'(\w+)\'\], \[\'(\w+)\', \'(\w*)\' , \'(\w+)\' , \'(\d+)\', \'(\w+)\'\] , \[\'(\w+)\', \'(\w*)\', \'(\w+)\' , \'(\d+)\', \'(\w+)\'\]/;
     
     
     
    print "$1\t$2 $3 $4 $5\ t$7 $9 $10\t$12 $14 $15\t$17 $19 $20\t$22 $24 $25\n"
     
     
    #on supprime de la chaine  data tous les caracteres ayant servis pour la premiere ligne 
    #......
     
     
    for limite in data:
    limie=limite.replace("\]\]" , '')  ##je veux supprimer de la chaine  data tous les caracteres ayant servis pour la premiere ligne !!mais probleme avec la syntawe comment l'ecrire correctement
     
    print ("limite\n" ) ;
     
    index = data ( 0 , limite+4, "")
     
    print("index\n");
     
    ##tant que la variable data est pleine , on sauvegarde dans un fichier les infos utiles dans un fichier .csv ,  (qu'on peut ouvrir avec un tableur grace a la separationsur sur la tabulation , on separe les colonnes par des tabulations
    ##et je met une double tabulation quand il y'a une colonne vide :
     
    while (data)
    {
     
    data =~ /^'(\w+)\' : \[\[\'(\w+)\', \'(\w*)\', \'(\w+)\', \'(\d+)\', \'(\w+)\'\]\'(\w+)\', \'(\w*)\', \'(\w+)\' ,\'(\d+)\' , \'(\w+)\'\] , \[\' (\w+) \', \'(\w*)\',  \' (\w+) \', \' (\d+) \' , \'(\w+)\'\]/;
     
     
    print "$1\t$2 $3 $4 $5\t\$7 $9 $10\t$12 $14 $15\t\n";
     
    limie=limite.replace("\]\]" , '')
     
    print ("limite\n") ;
     
     
    index= data (0 , limite+4 , "" )
     
    print ("index\n");
     
     
    }


    votre aide m'est tres precieuse d'autant plus que j'ai énnormement avancé grace a tout cela et a ce site ,

  13. #13
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 553
    Points : 2 740
    Points
    2 740
    Par défaut
    ouch!

    y a plusieurs gros soucis dans ton code, je sais pas si je vais réussir à faire la liste exhaustive:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data=~ /^\{\'(\w+)\' : \[\[\'(\w+)\', \'(\w*)\', \'(\w+)\', \'(\d+)\', \'(\w+)\'\],\'(\w+)\', \'(\w*)\', \'(\w+)\' ,\'(\d+)\' , \'(\w+)\'\] , \[\' (\w+) \', \'(\w*)\',  \' (\w+) \', \' (\d+) \' , \'(\w+)\'\], \[\'(\w+)\', \'(\w*)\' , \'(\w+)\' , \'(\d+)\', \'(\w+)\'\] , \[\'(\w+)\', \'(\w*)\', \'(\w+)\' , \'(\d+)\', \'(\w+)\'\]/;
    je ne suis pas certain que ça soit du python ça.
    en Python les pattern d'expressions régulières sont des chaines de caractères donc entre guillemets simples ou doubles (' ou ").
    on n'a, en général, pas de point-virgule à la fin d'une instruction. c'est pas interdit mais ça sert à rien quand on a qu'un instruction sur la ligne.
    je ne reconnais pas l'opérateur ~

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #on supprime de la chaine  data tous les caracteres ayant servis pour la premiere ligne
    data n'est pas une chaine au départ, c'est un dictionnaire.
    après je sais pas que que tu essayes de faire quand tu fais "data=~ ...", mais comme ça plante de toute façon le résultat n'est pas une chaine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for limite in data:
    limie=limite.replace("\]\]" , '')
    ça plante aussi ici car Python attend une indendation (pour marquer le bloc de la boucle) après la déclaration de la boucle for.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while (data)
    {
    ...
    }
    ça n'est pas du python. on ne délimite pas les blocs par des accolade en python, mais avec l'indentation.


    moralité:
    faut vraiment que tu fasses le tuto Python parce que là c'est clair que tu ne connais pas du tout les bases. et un truc certain c'est que tu n'arriveras jamais à rien en tatonnant sans avoir la moindre idée de ce que tu fais.
    tu auras peut être l'impression de perdre ton temps à ne pas bosser directement sur ton sujet, mais je t'assure qu'au final, tu vas y gagner. car vu comment c'est parti, à moins qu'on te donne le script tout fait, c'est pas près de fonctionner; même avec de l'aide et la meilleure volonté possible.

    et histoire de t'encourager, si tu suis le tuto, tu devrais être en mesure de savoir comment accéder simplement aux données d'un dictionnaire avant la fin de journée et de rigoler en pensant à l'usine à gaz que tu essayes de faire actuellement en cherchant a utiliser des expression régulières.

  14. #14
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 31
    Points : 5
    Points
    5
    Par défaut
    Je prends note de toutes tes remarques , c'est vrai que je tatonne , je ferais le nécéssaire pour y arriver de la bonne maniére , et en revoyant les bases mais mon soucis est que je comprends avec des exemples qui se rapproche de mon cas et avec , des exercices .... ! j
    anyway j'y arriverai , encore thanks for all

  15. #15
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 31
    Points : 5
    Points
    5
    Par défaut
    bonjour , helloo , auriez vous une explication pour ce type d'erreur please ???

    ValueError: zero length field name in format

    thanks

  16. #16
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 553
    Points : 2 740
    Points
    2 740
    Par défaut
    Salut,

    difficile à dire sans avoir la ligne qui cause l'erreur.
    peux-tu nous montrer l'instruction qui cause cette erreur?

    sinon y a un truc qui marche pas mal des fois: copier/coller directement le message d'erreur dans ton moteur de recherche préféré.

    et sinon, justement après avoir cherché ton message d'erreur avec Google, je suis pris d'un doute affreux:
    est-ce que tu n'utiliserais pas la version 2.6 de Python par hasard?

    tu peux voir ça en lanceant python en mode interactif dans une console.
    appuie sur les touches [windows]+[R], tape python dans la petite fenêtre qui s'ouvre et clique sur OK.
    ça devrait t'ouvrir une console avec un message de ce genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Python 2.7.4 (default, Apr  6 2013, 19:54:46) [MSC v.1500 32 bit (Intel)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
    la version est en rouge et j'aimerais bien connaitre celle dont tu disposes.

  17. #17
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 31
    Points : 5
    Points
    5
    Par défaut
    oui j'utilise bien la version 2.6 de python ,
    et bien j'ai réarangé mon code coté expressions regulieres en m'aidant des tuto et de ceci "http://www.loribel.com/info/memento/regex.html"http://www.loribel.com/info/memento/regex.html

    j'ai regardé pour l'erreur sur internet mais je ne suis pas sur d'avoir bien compris
    j'ai peu en mettant mon code qu'on me redise revoie les bases !! alors que je ne fais que cela , je veux reelemnt apprendre pas avoir un code tout prés c'est un casse téte mais c'est motivant au fur et à mesure que je recolte des indices p)our avancer

  18. #18
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 553
    Points : 2 740
    Points
    2 740
    Par défaut
    alors pour commencer, python 2.6, ça commence à être très vieux et il me semble que c'est plus trop mis à jour.
    du coup y a quelques fonctionalités en plus en python 2.7 et ça serait pas une mauvaise idée d'y passer si tu en as la possibilité. d'autant que les 2 version sont quand même très proches syntaxiquement.

    tous les liens vers de la doc que je t'ai donné traitaient de python 2.7, pour avoir la même chose pour python 2.6, il suffit de changer dans la liste de choix en haut à gauche de la page:


    sinon, d'après ce que j'ai vu lors ma rapide recherche tout à l'heure, je pense que tu dois utiliser la méthode format() d'une chaine de caractère.
    en python 2.7 on peut utiliser cette fonction comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "{} chaine {}".format("une", "quelconque")
    # -> "une chaine quelconque"
    dans ce cas python est capable de faire le lien automatiquement entre les champs ("{}") et les arguments qui sont passés à la méthode format()

    ------------------

    MAIS python 2.6 n'est pas aussi "malin" et il a besoin qu'on lui dise quel champ correspond à quel argument en numérotant les champs ou même en les nommant. accessoirement, ça permet aussi plus de flexibilité:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    "{0} chaine {1}".format("une", "quelconque")
    # -> "une chaine quelconque"
     
    "{1} chaine {0}".format("une", "quelconque")
    # -> "quelconque chaine une"
     
    "{pronom} chaine {adjectif}".format(adjectif="quelconque", pronom="une")
    # -> "une chaine quelconque"
    plus d'info dans la doc python 2.6 ici et ici (à noter: on peut faire tout ça aussi en python 2.7, ce n'est juste pas obligatoire)

    ton erreur vient donc probablement du fait tes champs ne sont ni numérotés, ni nommés et que python 2.6 ne sait rien faire d'un tel champ.

    enfin, la petite réprimande qui va bien pour finir: quand tu demandes ce que veut dire un message d'erreur, c'est toujours bien de mettre au moins la ligne qui produit l'erreur, même si tu mets pas tout ton code. une même erreur peut arriver dans des cas très différents et c'est pas toujours possible de "deviner" la cause.


    EDIT:
    sympa ton tuto sur les expressions régulières mais attention... les expressions régulières peuvent avoir des implémentations plus ou moins complètes ou standard selon les langages. la meilleure source d'info est en général la doc officielle du langage utilisé.
    Images attachées Images attachées  

  19. #19
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 31
    Points : 5
    Points
    5
    Par défaut
    hello à tous , je suis "happy" car les choses avancent dans mon script , j'admet que l'utilisation des expressions reguliéres demandent de l'agilité et je suis parvenue a comprendre pourquoi mon code ne fonctionnais pas finallement à cause des underscores contenues dans les caractéres de mon dictionnaire lui meme , et vue que cette piste m'a parrut la plus efficace , il faudrait etablir les bonnes expressions reguliéres pour y parvenir ,

    je me redirige vers vous encore une foiss en vous sollicitant une maniere de procédé avec une boucle , car j'ai essayé en faisant des testes avec des listes pour afficher ce que je voulais et ça marche seulement dans le programme il faudrait que ce soit fait dirrectement à partir de mon dico et la je n'arrive pas à faire ,
    voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    for key, val in data.iteritems():
        print key
     
    ###me retourne les valeurs du dico
    for v in data.values() :
    	print v


    qui m'affiche :bien une tabulation ,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
     
    [['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']]
    [['guanidinium', '', 'ARG', '254', 'A'], ['bb', 'backbone', 'GLY', '259', 'A'], ['hyd_ali', 'cb', 'MET', '258', 'A']]
    [['guanidinium', '', 'ARG', '254', 'A'], ['bb', 'backbone', 'GLY', '259', 'A'], ['hyd_ali', 'cb', 'MET', '258', 'A']]
    [['guanidinium', '', 'ARG', '77', 'B'], ['bb', 'backbone', 'GLY', '215', 'B'], ['hyd_ali', 'cbcg', 'LEU', '214', 'B']]
    [['guanidinium', '', 'ARG', '321', 'A'], ['bb', 'backbone', 'ALA', '332', 'A'], ['hyd_ali', '', 'ALA', '276', 'A']]
    [['guanidinium', '', 'ARG', '2192', 'B'], ['bb', 'backbone', 'ALA', '2031', 'B'], ['hyd_ali', 'cb', 'ARG', '2188', 'B']]
    [['guanidinium', '', 'ARG', '220', 'A'], ['bb', 'backbone', 'GLY', '192', 'A'], ['hyd_ali', '', 'ALA', '195', 'A']]

    en faisant des essais sur des listes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    liste2 =['guanidinium', '', 'ARG', '426', 'A']
    liste3= ['hyd_ali', 'cd', 'ARG', '426', 'A'] 
    liste4=['bb', 'backbone', 'GLY', '647', 'A'] 
    liste5 = ['hyd_ali', '', 'ALA', '650', 'A'] 
    liste6= ['hyd_ali', 'cbcg2', 'VAL', '662', 'A']
     
    m=' '.join(liste2)
    a1=' '.join(liste3)
    a2=' '.join(liste4)
    a3=' '.join(liste5)
    a4= ' '.join(liste6)
     
    print a, m, a1, a2, a3, a4
    ca me donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    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
    1) j'essaye de refaire cela a partir de mon dictionnaire et pour tout le dictionnaire, et comment on pourrai laisser des vides ?
    2) mon autre probleme est que ce code ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for key, val in data.iteritems():
        print key
    m'affiche les clés que je veux mais comment les afficher avec leur valeurs dans la meme ligne a chaque fois :

    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 ,


    nota :
    quand je dis j'ai avancé , j'ai eu un fichier de sortie ,alors que j'en avais pas avant ,
    2) j'ai compris que reconnaitre une difficulté permet de la détournée
    3) grand ouvert le livre de IVAN VAN LANINgham
    4) il faut faire partie de la solution pas du probléme dans toute chose ;
    En vous remerciant par avance

  20. #20
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 31
    Points : 5
    Points
    5
    Par défaut
    j'ai trouvé à l'aide de la méthode items qui retourne une liste de tuples de la forme (clé, valeur). La liste contient toutes les données stockées dans le dictionnaire.

    for keyval in data.items() :
    print keyval

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