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 :

Fltrage données dans un fichier


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 4
    Par défaut Fltrage données dans un fichier
    Bonjour à tous,
    Je dois filtrer un fichier (exemple avec quelques lignes sur environ 4000 ci dessous) en gardant que les lignes où les valeurs de A,B,C, et D de la colonne 8 sont inférieur à 0.05.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    chr1	953778	rs369883627	GA	CC	34644.1	PASS	A=0.09;B=0.07;C=0.06;D=0.100
    chr1	972419	rs111909377	T	C	1442.72	PASS	A=0.01;B=0.02;C=0.04;D=0.03
    chr1	3637103	rs114719689	G	A	3975.78	PASS	A=0.09;B=.;C=.;D=0.100
    chr1	3637208	rs114719689	G	T	4975.79	PASS	A=0.02;B=.;C=.;D=0.01
    chr1	972943	rs61732689	G	A	2119.47	PASS	A=0.08;B=0.10;C=0.07
    chr1	1309258	rs12094447	G	A	889.21	PASS	A=0.01;B=0.02;D=0.03
    chr1	1291471	rs61730205	C	T	1003.14	PASS	variant
    chr1	1291675	rs61730506	C	T	1008.14	PASS	normal
    Pour ce faire j'ai utilisé ce code :

    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
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
     
    import re
     
    #Ouverture fichier input et output
    output = open("/home/kevin/Bureau/out_data_test.txt","w")
    f1 = open("/home/kevin/Bureau/data_test.txt","r")
    l1 = f1.readlines()
     
    #Ligne où A,B,C, et D sont présent et il n'y a pas de point à la place d'un float
    for line in l1:
        A = re.search("A*=[0-9.,e-]*",line)
        B = re.search("B*=[0-9.,e-]*",line)
        C = re.search("C*=[0-9.,e-]*",line)
        D = re.search("D*=[0-9.,e-]*",line)
        #Si on a tous les éléments et que tous ces éléments ont chacun une valeur
        if A and D and B and C:
            if not (re.search("B*=\.[^0-9]",line) or re.search("C*=\.[^0-9]",line) or re.search("D*=\.[^0-9]",line) or re.search("A*=\.[^0-9]",line)):
              if float(A.group(0).split("=")[1]) < 0.05 and float(D.group(0).split("=")[1]) < 0.05 and float(B.group(0).split("=")[1]) < 0.05 and float(C.group(0).split("=")[1]) < 0.05:
                        output.write(line)
     
        #Si on a des éléments non présents (None où un point comme valeur) et que le autres sont inférieur à 0.05
        elif (A is not None and not re.search("A*=\.[^0-9]",line) and float(A.group(0).split("=")[1]) < 0.05 or D is not None and not re.search("D*=\.[^0-9]",line) and float(D.group(0).split("=")[1]) < 0.05 or B is not None and not re.search("B*=\.[^0-9]",line) and float(D.group(0).split("=")[1]) < 0.05 or C is not None and not re.search("C*=\.[^0-9]",line) and float(C.group(0).split("=")[1]) < 0.05):
            output.write(line)
     
        #Si aucun n'est présent et qu'on a le mot variant
        if not(A or D or B or C) and "variant" in line:
            output.write(line)
    Le problème est que dans ma sortie, il y a des lignes où il y A=0.08;B=0.10;C=0.07 et D=None. Dans ce cas, toutes les valeurs supérieurs sont à 0.05. De plus, je n'arrive pas à récupérer les lignes où il y a des points comme par exemple : A=0.02;B=.;C=.;D=0.01.

    Que manque t'il à mon code pour éviter pouvoir atteindre mon objectif final s'il vous plaît ??

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

    Citation Envoyé par keke_972 Voir le message
    Que manque t'il à mon code pour éviter pouvoir atteindre mon objectif final s'il vous plaît ??
    Le soucis est dans l'évaluation des conditions à la ligne 24.
    Relisez là.
    Arrivez vous à savoir quelles sont les lignes qui vont donner vrai? Certainement pas puisque sinon, votre code fonctionnerait.
    Donc il faut simplifier en pensant à trier vos données différemment, histoire que le code reste lisible.

    Personnellement, je récupérais A, B, C, D dans une liste à 4 positions en leur assignant la valeur flottante récupérée dans la ligne ou None (s'il n'y a rien ou un '.').
    S'il n'y a que des None et que la ligne contient 'variant', je passe à la ligne suivante.
    Sinon je remplace les None par 0.05(*) et on écrit la ligne si toutes les valeurs sont inférieures à 0.05.
    (*) il est plus facile de remplacer None par 0.05 et tester L <= [0.05]*4

    Dit autrement il faut faire de l'informatique, i.e. mettre les données (ici extraites de la ligne) en une forme adaptée au traitement à faire le plus tôt possible.... Sinon vous traînez un boulet, et vous ne comprenez plus le code que vous écrivez.

    Et voilà.

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

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 4
    Par défaut
    Je vous remercie pour votre aide. J'ai pu résoudre mon problème en utilisant votre raisonnement !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 23/10/2005, 12h24
  2. [](VB) Récupérer les données dans un fichier .xml
    Par Furius dans le forum VBScript
    Réponses: 4
    Dernier message: 02/10/2005, 20h39
  3. [XML] stocker des données dans un fichier XML
    Par R3iTt0R dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 27/05/2005, 16h51
  4. Réponses: 3
    Dernier message: 22/02/2004, 20h09
  5. Temps d'accès à des données dans un fichier
    Par TONIAPEL dans le forum Assembleur
    Réponses: 5
    Dernier message: 28/09/2003, 15h21

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