Partage
  • Partager sur Facebook
  • Partager sur Twitter

parseur

Sujet résolu
16 février 2011 à 13:35:18

Bonjour j'ai un souci jai un fichier txt que voila:


merci
  • Partager sur Facebook
  • Partager sur Twitter
16 février 2011 à 15:05:12

Tu ouvres ton fichier à l'aide de open très simplement :

Citation


fichier = open("fichier.txt","r")
code = fichier.read()
fichier.close()


A partir de là tu as ta variable code qui contient tout ton texte.
Ensuite il faut faire de l'expression réguliaire.
Tu prends ce qui y a entre "Aster-" et le saut de ligne "\n"

soit :

Citation


import re
liste = re.findall("Aster-(.*?)\n",code)


Cela te retourne une liste avec tout tes numéro Aster normalement.

  • Partager sur Facebook
  • Partager sur Twitter
16 février 2011 à 17:21:29

Ou bien plus simple encore, et sans doute plus rapide que les expressions régulières.

fichier = open("fichier.txt", "r")
numeros = []

for ligne in fichier: # lis chaque ligne dans le fichier
 numeros.append(ligne[13:]) # ne sélectionne que la partie voulue de la chaine de caractère, à partir du charactère numéro 13 jusqu'à la fin

fichier.close()
  • Partager sur Facebook
  • Partager sur Twitter
17 février 2011 à 1:56:18

J'ai plutôt l'impression qu'il veut le code Aster-xxxx jusqu'à l'espace suivant (sinon ça n'a pas de sens).

Auquel cas:

with open(fichier, 'r') as fich:
   numeros = [line.split()[1] for line in fich]
   # ou bien, si tu les veux sous forme d'entiers sans le "Aster-"
   numeros2 = [int(line.split()[1][6:]) for line in fich]


  • Partager sur Facebook
  • Partager sur Twitter
Zeste de Savoir, le site qui en a dans le citron !
17 février 2011 à 13:15:17

Bonjour, merci pour toutes vos reponses:

Merci
  • Partager sur Facebook
  • Partager sur Twitter
17 février 2011 à 13:24:48

Soit tu les tries, soit tu sais que les numéros Aster sont uniques, auquel cas tu peux faire la comparaison comme ceci :

set(liste1) == set(liste2)
  • Partager sur Facebook
  • Partager sur Twitter
Zeste de Savoir, le site qui en a dans le citron !
17 février 2011 à 13:27:33

Non les numeros Aster ne snt pas uniques il faut a chaque fois que je compare le couple pour la premiere liste Aster-****,C169v2-***** et avec l`autre liste inverser C169v2-***** ,Aster-****
  • Partager sur Facebook
  • Partager sur Twitter
17 février 2011 à 13:50:48

Ah au temps pour moi j'avais mal compris ta question.

Dans ce cas, il faut que tu remplisses tes listes plus intelligemment :

>>> with open('fichier1') as fichier:
...    num1 = [tuple(line.split('\t')[:2]) for line in fichier]
...
>>> num1
[('C169v2-00004', 'Aster-05984'), ('C169v2-00005', 'Aster-03546'),
 ('C169v2-00006', 'Aster-06981'), ('C169v2-00006', 'Aster-06981'), 
# ... 
 ('C169v2-00008', 'Aster-02060'), ('C169v2-00008', 'Aster-01379'),
 ('C169v2-00008', 'Aster-01379')]

>>> with open('fichier2') as fichier:
...    num2 = [tuple(line.split('\t')[1::-1]) for line in fichier]
...
>>> num2
[('C169v2-00004', 'Aster-05984'), ('C169v2-05737', 'Aster-03090'),
 ('C169v2-02908', 'Aster-03090'), ('C169v2-00572', 'Aster-03090'), 
# ...
 ('C169v2-00984', 'Aster-03091'), ('C169v2-07569', 'Aster-03091'),
 ('C169v2-02230', 'Aster-03091'), ('C169v2-02230', 'Aster-03091')]

>>> # maintenant, on regarde quelles entées ils ont en commun
>>> num3 = [t for t in num1 if t in num2]
>>> num3
[('C169v2-00004', 'Aster-05984'), ('C169v2-00005', 'Aster-03546'),
 ('C169v2-00007', 'Aster-02416')]
  • Partager sur Facebook
  • Partager sur Twitter
Zeste de Savoir, le site qui en a dans le citron !
17 février 2011 à 14:00:45

Ok merci mais je me retouve avec des doubles a chaue fois ('C169v2-00006', 'Aster-06981'), ('C169v2-00006', 'Aster-06981'), et je dois recuperer le premier de chaque ligne les autres je laisse par exmple ('C169v2-00008', 'Aster-02060'), ('C169v2-00008', 'Aster-01379'), je dois recuperer ('C169v2-00008', 'Aster-02060'), le test je le met ou?


merci

en fait il faut aue je rajoute if(line[10] not in indice): car si la ligfne den bas je retrouve 'C169v2-00008' il faut que je garde le premier 'C169v2-00008' et passer C169v2-00009'
  • Partager sur Facebook
  • Partager sur Twitter
17 février 2011 à 14:08:52

Qu'est-ce que tu veux dire par "le premier de chaque ligne" ?
En gros, qu'est-ce qui doit être unique dans tes listes ?

Si tu expliquais plus précisément ce que tu cherches à faire (la finalité), on pourrait mieux t'aider.
  • Partager sur Facebook
  • Partager sur Twitter
Zeste de Savoir, le site qui en a dans le citron !
17 février 2011 à 14:14:25

ok pardon je m`explique mieux:
premier fichier
  • Partager sur Facebook
  • Partager sur Twitter
17 février 2011 à 14:21:57

Et le but du jeu c'est de faire quoi, au final ?

  • Partager sur Facebook
  • Partager sur Twitter
Zeste de Savoir, le site qui en a dans le citron !
17 février 2011 à 14:26:56

le but cest davoir les couples reciproques a chaque fois:

dans le premier fichier je recupere les couples C169v2-**** Aster-*****
dans le deuxieme fichier linverse Aster-***** C169v2-****

ensuite je regarde si je retouve dans les deuxx cas le meme C169v2-**** Aster-***** je garde le reste je laisse.

donc dans la premiere partie faut faire attention C169v2-**** qui sont plusieurs fois
et dans lautre les Aster-*****


ensuite je compare les couple comme dans

Citation

>>> # maintenant, on regarde quelles entées ils ont en commun
>>> num3 = [t for t in num1 if t in num2]
>>> num3
[('C169v2-00004', 'Aster-05984'), ('C169v2-00005', 'Aster-03546'),
('C169v2-00007', 'Aster-02416')]

  • Partager sur Facebook
  • Partager sur Twitter
17 février 2011 à 14:37:04

Bah dans ce cas :

num3 = list(set(num1).intersection(set(num2)))
  • Partager sur Facebook
  • Partager sur Twitter
Zeste de Savoir, le site qui en a dans le citron !
17 février 2011 à 14:42:44

ben en fait comme les deux fichiers representent des resultats de blast donc le meilleur cest a chaque fois le
  • Partager sur Facebook
  • Partager sur Twitter
17 février 2011 à 14:45:54

Ah d'accord. Tout de suite ça prend du sens (le coup des set n'est pas bon dans ce cas).
Et le second fichier correspond à quoi ?


  • Partager sur Facebook
  • Partager sur Twitter
Zeste de Savoir, le site qui en a dans le citron !
17 février 2011 à 14:49:32

en fait le premier fichier correspond a un balst coco contre aster
le deuxieme fichier aster contre coco

ensuite la derniere partie des comparaisons des tuples correspond au reciprocal best blast hits qui correspond aux tuples que je retrouve dans les deux cas
  • Partager sur Facebook
  • Partager sur Twitter
17 février 2011 à 14:56:22

OK, bon, donc du coup il faut passer par des dictionnaires :

>>> d1, d2 = {}, {}
>>> with open('fichier1') as fichier:
...     for line in fichier:
...        cv, aster = line.split('\t')[:2]
...        if cv not in d1:
...            d1[cv] = aster
... 
>>> with open('fichier2') as fichier:
...     for line in fichier:
...         aster, cv = line.split('\t')[:2]
...         if aster not in d2:
...             d2[aster] = cv
... 
>>> d1
{'C169v2-00004': 'Aster-05984', 'C169v2-00005': 'Aster-03546',
 'C169v2-00006': 'Aster-06981', 'C169v2-00007': 'Aster-02416',
 'C169v2-00008': 'Aster-00624'}
>>> d2
{'Aster-03090': 'C169v2-05737', 'Aster-03546': 'C169v2-00005', 
 'Aster-02416': 'C169v2-00007', 'Aster-03091': 'C169v2-07318',
 'Aster-05984': 'C169v2-00004'}
>>> num1 = [(cv, aster) for cv, aster in d1.iteritems()] 
>>> num2 = [(cv, aster) for aster, cv in d2.iteritems()]
>>> num3 = [t for t in num1 if t in num2]
>>> num1
[('C169v2-00004', 'Aster-05984'), ('C169v2-00005', 'Aster-03546'),
 ('C169v2-00006', 'Aster-06981'), ('C169v2-00007', 'Aster-02416'),
 ('C169v2-00008', 'Aster-00624')] 
>>> num2
[('C169v2-05737', 'Aster-03090'), ('C169v2-00005', 'Aster-03546'),
 ('C169v2-00007', 'Aster-02416'), ('C169v2-07318', 'Aster-03091'),
 ('C169v2-00004', 'Aster-05984')]
>>> num3
[('C169v2-00004', 'Aster-05984'), ('C169v2-00005', 'Aster-03546'),
 ('C169v2-00007', 'Aster-02416')]
  • Partager sur Facebook
  • Partager sur Twitter
Zeste de Savoir, le site qui en a dans le citron !
17 février 2011 à 15:07:29

ok merci beaucoup ca marche cest cool merci beaucoup infiniment merciiiiii
  • Partager sur Facebook
  • Partager sur Twitter
17 février 2011 à 15:23:10

Merci de marquer ton sujet comme résolu, dans ce cas.
  • Partager sur Facebook
  • Partager sur Twitter
Zeste de Savoir, le site qui en a dans le citron !
17 février 2011 à 15:45:31

Des fois, utiliser l'outil adapté ...

test=> CREATE TABLE a (id SERIAL PRIMARY KEY, a TEXT, b TEXT, c FLOAT, d INT, e INT, f INT, g INT, h INT, i INT, j INT, k FLOAT, l FLOAT);
NOTICE:  CREATE TABLE créera des séquences implicites « a_id_seq » pour la colonne serial « a.id »
NOTICE:  CREATE TABLE / PRIMARY KEY créera un index implicite « a_pkey » pour la table « a »
CREATE TABLE
Temps : 109,035 ms
test=> \copy a (a,b,c,d,e,f,g,h,i,j,k,l) FROM aster1.txt
Temps : 0,852 ms
test=> 
test=> CREATE TABLE b (id SERIAL PRIMARY KEY, a TEXT, b TEXT, c FLOAT, d INT, e INT, f INT, g INT, h INT, i INT, j INT, k FLOAT, l FLOAT);
NOTICE:  CREATE TABLE créera des séquences implicites « b_id_seq » pour la colonne serial « b.id »
NOTICE:  CREATE TABLE / PRIMARY KEY créera un index implicite « b_pkey » pour la table « b »
CREATE TABLE
Temps : 211,233 ms
test=> \copy b (a,b,c,d,e,f,g,h,i,j,k,l) FROM aster2.txt
Temps : 0,876 ms
test=> 
test=> SELECT DISTINCT ON (a) * FROM a ORDER BY a, id;
 id |      a       |      b      |   c   |  d  |  e  | f |  g  |  h  |  i  |  j  |   k    |  l   
----+--------------+-------------+-------+-----+-----+---+-----+-----+-----+-----+--------+------
  1 | C169v2-00004 | Aster-05984 | 47.09 | 223 | 110 | 4 |   1 | 218 |  24 | 243 |  9e-55 |  207
  2 | C169v2-00005 | Aster-03546 | 66.67 | 264 |  88 | 0 |   1 | 264 |  13 | 276 | 5e-101 |  362
  3 | C169v2-00006 | Aster-06981 | 29.01 | 262 | 162 | 6 | 119 | 362 | 180 | 435 |  2e-20 | 96.3
 21 | C169v2-00007 | Aster-02416 | 71.79 | 156 |  42 | 2 |   3 | 158 |   4 | 157 |  5e-53 |  201
 22 | C169v2-00008 | Aster-00624 | 54.82 | 166 |  74 | 1 | 144 | 308 |   1 | 166 |  2e-48 |  187
(5 lignes)

Temps : 0,439 ms
test=> SELECT DISTINCT ON (a) * FROM b ORDER BY a, id;
 id |      a      |      b       |   c   |  d  |  e  | f  |  g  |  h   |  i  |  j  |   k   |  l   
----+-------------+--------------+-------+-----+-----+----+-----+------+-----+-----+-------+------
 18 | Aster-02416 | C169v2-00007 | 26.92 | 104 |  69 |  2 | 138 |  241 | 122 | 218 | 0.004 | 37.4
  2 | Aster-03090 | C169v2-05737 | 33.23 | 668 | 374 | 14 | 413 | 1069 |  11 | 617 | 3e-84 |  308
  9 | Aster-03091 | C169v2-07318 | 37.23 | 188 | 108 |  4 | 131 |  317 | 161 | 339 | 2e-26 |  115
  8 | Aster-03546 | C169v2-00005 | 30.16 |  63 |  42 |  1 | 129 |  189 | 163 | 225 |   8.2 | 28.5
  1 | Aster-05984 | C169v2-00004 | 40.35 | 575 | 297 | 10 | 415 |  987 |  30 | 560 | 2e-92 |  336
(5 lignes)

Temps : 0,441 ms
test=> WITH a AS (SELECT DISTINCT ON (a) * FROM a ORDER BY a, id), b AS (SELECT DISTINCT ON (a) * FROM b ORDER BY a, id) SELECT * FROM a JOIN b ON (a.a=b.b AND a.b=b.a);
 id |      a       |      b      |   c   |  d  |  e  | f | g |  h  | i  |  j  |   k    |  l  | id |      a      |      b       |   c   |  d  |  e  | f  |  g  |  h  |  i  |  j  |   k   |  l   
----+--------------+-------------+-------+-----+-----+---+---+-----+----+-----+--------+-----+----+-------------+--------------+-------+-----+-----+----+-----+-----+-----+-----+-------+------
  1 | C169v2-00004 | Aster-05984 | 47.09 | 223 | 110 | 4 | 1 | 218 | 24 | 243 |  9e-55 | 207 |  1 | Aster-05984 | C169v2-00004 | 40.35 | 575 | 297 | 10 | 415 | 987 |  30 | 560 | 2e-92 |  336
  2 | C169v2-00005 | Aster-03546 | 66.67 | 264 |  88 | 0 | 1 | 264 | 13 | 276 | 5e-101 | 362 |  8 | Aster-03546 | C169v2-00005 | 30.16 |  63 |  42 |  1 | 129 | 189 | 163 | 225 |   8.2 | 28.5
 21 | C169v2-00007 | Aster-02416 | 71.79 | 156 |  42 | 2 | 3 | 158 |  4 | 157 |  5e-53 | 201 | 18 | Aster-02416 | C169v2-00007 | 26.92 | 104 |  69 |  2 | 138 | 241 | 122 | 218 | 0.004 | 37.4
(3 lignes)
  • Partager sur Facebook
  • Partager sur Twitter
18 février 2011 à 10:08:16

Bonjour , je croyais que j`avais fini avec cette partie mais la non desole , voila en reprenant le code que voici
  • Partager sur Facebook
  • Partager sur Twitter