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 :

Problème de boucle


Sujet :

Python

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2020
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 19
    Par défaut Problème de boucle
    Bonjour à tous,
    j'ai script dont le but est de récupérer des données dans un fichier d'entrée (file_in) et d'écrire sous un format différent un fichier de sortie (file_out).
    Au passage j'ajoute un autre fichier qui contient des données qui m’intéresse et dont je souhaite récupérer certaines valeurs à écrire dans le fichier de sortie.

    Cela fonctionne...partiellement...car je récupère bien tout ce qu'il me faut sauf que j'ai une boucle qui se "forme" et donc toutes mes lignes de mon fichier d'entrée sont dupliquées.
    Je pense que cela peut éventuellement venir d'un problème d'indentation mais je n'arrive pas à le solutionner.

    Merci d'avance pour votre aide


    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
    def Cluster (file_in,file_out):
     
            with open (file_in,"r") as f, open (file_out,"w") as g:
                for line in f:
                    linesplit=line.split("\t")
                    Gene=linesplit[0]
                    Sequence=linesplit[1].split(":")
                    Sequencefinal=Sequence[0].replace("+","").replace("-","").strip()
                    FamilleATB=linesplit[5]
                    Mechanisms=linesplit[6]
                    if FamilleATB == "NA":
                        FamilleATB=Mechanisms
                    else:
                        FamilleATB=FamilleATB
                    Taxon=linesplit[7].strip("\n")
     
                    with open("DB.txt","r") as h:
                        for line in h:
                            linesplitDB=line.split("\t")
                            GeneDB=linesplitDB[0].strip("*")
                            Groupe=linesplitDB[1].strip('\n')
                            if Gene == GeneDB:
                                Cluster=Groupe
                            else:
                                Cluster="."
     
                            g.write(f"{Gene}_{Sequencefinal}\t1\t0\t.\t{Cluster}\t{FamilleATB}_{Taxon}\n")

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 721
    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 721
    Par défaut
    Salut,

    Citation Envoyé par m01x75 Voir le message
    Je pense que cela peut éventuellement venir d'un problème d'indentation mais je n'arrive pas à le solutionner.
    Si vous voulez écrire au plus une ligne pour chaque ligne lue dans f, il faut que le g.write soit dans le bloc du "for" correspondant. La vous l'avez mis dans un bloc interne et çà écrit plusieurs fois.

    - 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
    Octobre 2020
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 19
    Par défaut
    Merci pour votre réponse.

    Néanmoins si je décale le g.write au niveau du premier for alors je n'ai plus qu'une seule ligne dans mon fichier de sortie (correspondant à la dernière de mon fichier d'entrée).
    Et si je décale le g.write au niveau du deuxième for j'ai bien une ligne à chaque fois mais ça ne me prend pas la boucle if qui regarde dans le fichier DB si des champs sont identiques...

    Je sens que c'est un truc tout bête mais là je vois pas...

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 721
    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 721
    Par défaut
    Citation Envoyé par m01x75 Voir le message
    Je sens que c'est un truc tout bête mais là je vois pas...
    A partir du moment où on ne peut pas reproduire et que ce que vous racontez n'a pas trop de sens "techniquement"... on ne va pas trouver le truc "bete".

    Simplifiez votre code. Par exemple en poussant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                with open("DB.txt","r") as h:
                        for line in h:
                            linesplitDB=line.split("\t")
                            GeneDB=linesplitDB[0].strip("*")
                            Groupe=linesplitDB[1].strip('\n')
                            if Gene == GeneDB:
                                Cluster=Groupe
                            else:
                                Cluster="."
    dans une fonction pour remplacer tout çà par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
             Cluster = lafonction(GeneDB)
    Ajoutez des "print" (c'est plus facile de voir ce qui se passe à l'écran qu'aller lire un fichier après).

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

Discussions similaires

  1. Problème de boucles imbriquées
    Par Gnux dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 09/12/2005, 20h26
  2. [Tableaux] Problème avec boucle
    Par MYster dans le forum Langage
    Réponses: 6
    Dernier message: 11/11/2005, 18h39
  3. Problème de boucle
    Par TheUltimaSephiroth dans le forum C
    Réponses: 8
    Dernier message: 10/10/2005, 13h58
  4. Problème de boucle
    Par Louis-Guillaume Morand dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/09/2005, 09h10
  5. Problème de boucle
    Par basclln dans le forum C++
    Réponses: 19
    Dernier message: 02/04/2005, 09h13

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