Comment obtenir un tableau csv a partir d'un dictionnaire

Fermé
latitude27 Messages postés 1 Date d'inscription jeudi 10 avril 2014 Statut Membre Dernière intervention 10 avril 2014 - 10 avril 2014 à 17:05
 Utilisateur anonyme - 10 avril 2014 à 19:47
bonjour guys , je me déméle avec un code python , j'ai un fichier d'entrée que j'ai parsé , pour obtenir une liste de dictionnaire sauf qu'a partir de ceci je dois les stocker dans un tableau d'une maniere particuliere

voici le dico , une partie

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']]}

for key, val in data.iteritems():
    print key

###me retourne les valeurs du dico
for v in data.values() :
	print v 

### La methode items retourne une liste de tuples de la forme (cle, valeur). La liste contient toutes les donnees stockees dans le dictionnaire. 	
for keyval in data.items() : 
	print keyval 




mais je souhaite , obtenir une sortie output , dans un fichier csv ,
de ce type de tableau

1QMF guanidiniumARG426 hyd_aliARG426 backboneGLY647 hydaliALA650
2NT7 'guanidinium'ARG254' backboneGLY259 hyd_aliMET258

......

ainsi de suite sous forme de tableau ??,
une ame charitable pourrait m'aider ,,,,???

1 réponse

Utilisateur anonyme
10 avril 2014 à 19:47
C'est très moche comme approche, je trouve ton dictionnaire bien compliqué...

Il faut travailler en deux étapes

* Analyser ta liste pour avoir les indices 0, 2 et 3 espacé
* Construire ta ligne à l'aide de ta fonction analyser

Voilà ce que je propose

* La classe LengthException pour vérifier que ta liste de listes contient bien 5 listes pour chaque clé de dictionnaire et vérifier que chaque liste contient bien 5 éléments.
En plus de cela, elle t'avertira de l'endroit, liste ou liste de listes et spécifiera qu'elle est celle non fonctionnelle (faisant bugger le programme)

* La fonction parser pour arriver à ce résultat -> guanidinium ARG 426
* La fonction construct pour construire la ligne finale pour chaque clé -> guanidinium ARG 426 hyd_ali ARG 426 bb GLY 647 hyd_ali ALA 650 hyd_ali VAL 662

Voici le code

class LengthException(Exception):
    pass

def parse(myList):
    LENGTH = 5
    if len(myList) != LENGTH:
        raise LengthException("bad length of list -> {}".format(repr(myList)))

    a, b, c, d, e = myList

    return ' '.join([a, c, d])

def constructLine(listOfList):
    LENGTH = 5
    if len(listOfList) != LENGTH:
        raise LengthException("bad length of listOfList -> {}".format(repr(listOfList)))

    res = ''
    for myList in listOfList:
        res += parse(myList)
        res += ' '

    return res

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']]}

for key in data:
    print(constructLine(data[key]))


Bonne continuation...
0