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 :

parser un fichier et recuperer des valeurs que l'on stocke dans un tableau


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 parser un fichier et recuperer des valeurs que l'on stocke dans un tableau
    Bonjour à tous , cela fait un bon moment que je me démèle avec ce parseur j'ai essayé plusieurs approches , dictionnaires , etc ..j'avance à un rythme d'un escargot anémié je suis perdue avec les boucles for !aussi
    mon fichier est en piece jointe et mon format de sortie aussi ,
    voici le debut de mon code mais cela ne sort pas trop ce dont j'ai besoin... reelement !!! pouaahhh

    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
    fichier = open('sumo.txt', "r")
    lignes = fichier.readlines ()
     
    for uneLigne in lignes:
        champs=uneLigne.split()
        #print champs
        if len(champs)>0 and champs[0]== "guanidinium":
                 Guan=champs[2]
        elif len(champs)>0 and champs[0]== "hyd_ali":
    	     hyd=champs[2]
     
        elif len(champs)>0 and champs [0] == "hyd_ali ALA" :
    	     hyd=champs [2]
     
        elif len (champs) > 0 and champs [0] =="hyd_ali VAL" :
    	     hyd=champs [2]		
        elif len (champs) > 0 and champs [0] == "bb" :
    	     Bb = champs [3]
     
     
        if uneLigne[0]=="-":
            print "guanidinium ARG:"+Guan
            print "hyd_ali ARG :"+hyd[ATTACH]141626[/ATTACH]
    	print "hyd_ali ALA:" + hyd
            print "hyd_ali VAL:" + hyd
    	print "backbone:" + Bb

  2. #2
    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
    Salut,

    Je pense que ceci sera plus proche de ce que tu attend

    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
     
    with open('sumo.txt', "r") as inf:
        for line in inf:
            # enlever le retour ligne
            line = line.strip()
            if not line:
                # ligne vide
                continue
            champs = line.split(' ')
            if not champs:
                # on ignore
                continue
            if champs[0] == "guanidinium":
                Guan = champs[2]
            elif champs[0] == "hyd_ali":
                # verifier les deux directement
                if champs[1] in ("ALA", "VAL"):
                    hyd = champs[3]
                else:
                    hyd = champs[2]
            elif champs[0] == "bb":
                Bb = champs[3]
    La suite, je ne sais pas parce que ton code n'est pas indenté.


    La balise code est le symbole dièse # dans la barre d'outils d'édition.

  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 pour ton aide vinsS tu m'as aider a y voir plus clair ,

    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
     
     
    fichier = open('sumo.txt', "r")
    lignes = fichier.readlines ()
     
    for uneLigne in lignes:
           champs=uneLigne.split()
     
        #print champs
        if len(champs)>0 and champs[0]== "guanidinium":
                  Guan=champs[2]
        elif len(champs)>0 and champs[0]== "hyd_ali":
                  hyd=champs[2]
     
        elif len(champs)>0 and champs [0] == "hyd_ali ALA" :
                  hyd=champs [2]
     
        elif len (champs) > 0 and champs [0] =="hyd_ali VAL" :
                 hyd=champs [2]
        elif len (champs) > 0 and champs [0] == "bb" :
                 Bb = champs [3]
     
     
        if uneLigne[0]=="-":
     
              print "guanidinium ARG:"+Guan
              print "hyd_ali ARG :"+hydPièce jointe 141626
              print "hyd_ali ALA:" + hyd
              print "hyd_ali VAL:" + hyd
              print "backbone:" + Bb

    le soucis avec mon code est qu'il me recupere des valeurs et qu'ils les repetent exemple de la sortie qui n'est pas tout a fait comme mon fichier de depart , et puis afin de stocker toutes ses valeurs dans mon tableau excel ,,,, je crois qu'il me reste du chemin a faire et j'ai l'impresion de tourner en rond sans trouver d'issus possible , a chaque fois que je tente une nouvelle approche soit ce n'est pas la bonne encore une fois !! ou alors je me perd encore plus qu'au debut et je reviens au point de depart !!!!!!


    sortie de mon code :
    guanidinium ARG:426
    hyd_ali ARG :VAL
    backbone:647
    hyd_ali ALA:VAL
    hyd_ali VAL:VAL
    guanidinium ARG:426
    hyd_ali ARG :650
    backbone:647
    hyd_ali ALA:650
    hyd_ali VAL:650
    guanidinium ARG:426
    hyd_ali ARG :650
    backbone:647
    hyd_ali ALA:650
    hyd_ali VAL:650
    guanidinium ARG:426
    hyd_ali ARG :650
    backbone:647
    hyd_ali ALA:650

  4. #4
    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
    j'ai tenter en effet en utilisant un dictionnaire , je ne suis pas du genre à me decourager facilement , cependant , c'est claire qu'il me faut une aide , ou plusieurs avis pour en sortire une idée coherente et qui fonctionnerait en fin , !!! pour ce tableau !!!!!
    voici mon code en utilisant les dictionnaires
    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
     
     
    fichier = open('sumo.txt', "r")   
    filin=fichier.readlines
     
    for ligne in fichier.readlines():
     
     
    	print(ligne.rstrip())
     
    #les differents dictionnaires avec des cles similaires
     
    dico1= {"1QMF guanidinium ARG" :(426)  ,"1QMF hydali ARG" :( 426) , "1QMF bb GLY " : (647)  , "1QMF hydali ALA" :( 650), "1QMF hydali VAL" :(662)},
     
    dico2= {" 1X7Z guanidinium ARG" :(220) ,"1X7Z bb GLY" : (192 )  , " 1X7Z hydali ALA ":(195) }
     
    dico3 ={ "2ZI6 guanidinium ARG" : (2192) , "2ZI6 bb ALA" :(2031)  ,"2ZI6 hydali ARG" :( 2188) }
     
    dico4 ={"3A9E guanidinium ARG"  :(321) ,  "3A9E  bb ALA" : ( 332) , "3A9E" "hydali ALA" :(276) }
     
    dico5 = {"2NT7 guanidinium ARG" : (254) , "2NT7 bb GLY" : (647) , "2NT7 hydali MET" :(258)  }
     
    dico6={"3U2V guanidinium  ARG" :( 77),  "3U2V bb GLY" :(215) ,"3U2V hydali LEU" :(214) }
     
     
    dico7 ={"2F6Z guanidinium ARG" : (254 ) , "2F6Z bb GLY" :( 259 ) ,"2F6Z hydali MET " : (650) }
     
     
    mes_dicos = [dico1, dico2 , dico3 , dico4 , dico5 , dico6, dico7 ]
     
     
    for dico in mes_dicos:
    	for value in dico :
    		print dico
    la aussi çeci m'imprime 3 fois a chaque fois les lignes souhaitées !!! au lieu d'une seule fois seulement

  5. #5
    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 même que le premier dico est printé cinq fois, non ?

    ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for dico in mes_dicos:    # pour chaque dico dans la liste
    	for value in dico :   # pour chaque clé du dico
    		print dico       # print le dico entier
    Ce n'est pas plutôt ceci que tu veux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for dico in mes_dicos:
        for key, value in dico.items():
            print value,
        print
    Ca donne ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    647 650 426 662 426
    192 195 220
    2188 2192 2031
    321 332 276
    647 254 258
    214 215 77
    259 254 650

  6. #6
    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
    oui parfaitement je voudrai recuperer les valeurs aussi , seulement ça me met une erreur

    AttributeError: 'tuple' object has no attribute 'items' quand j'utilise ce que vous m'avez conseillé je ne comprends pas pourquoi ???,

Discussions similaires

  1. Réponses: 17
    Dernier message: 11/10/2012, 18h27
  2. Réponses: 2
    Dernier message: 05/12/2011, 19h32
  3. Réponses: 1
    Dernier message: 10/03/2011, 15h01
  4. [MySQL] recuperation des valeurs de zone de text dans datagrid
    Par dimainfo dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 20/07/2009, 15h26
  5. Réponses: 3
    Dernier message: 08/01/2009, 14h44

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