Bonjour,
Voila j'ai un souci algorthmique, je m'explique:
Je fais un exemple:
Je prends une proteine coco1 4 14
Je dois aller faire une collection de distance proteique a partir des distances genomiques:
coco 10..39,100..129
ainsi je fais coco1 aa-> codon
ce qui fait concretement:je rajoute +3 a chaque fois
1->10
2->13
3->16
4->19
...
11->39
12->112(100+12)
13->115
14->118
jusqua la fin
ainsi je dois faire la concordance maintenant a partir de mon dico rempli coco1 4 11 je dois dire coco1 4->19 et la position final 11->39
Voila les deux fichiers que j'utilise
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 C169v2-00001 Aster-03513 64 112 1192 1246 C169v2-00002 Aster-03154 2 83 172 264 C169v2-00003 Aster-06252 74 116 57 96 C169v2-00004 Aster-05984 1 218 24 243Le premier fichier ces les positions pour chaque proteine
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 # Colonne 1: scaffold # 2: gene id # 3: start # 4: dir # 5: origine gene model # 6: proteinId # 7: ex-nom # 8: coordonnees genomiques # 9: structure intron/exon # 10: segments du CDS couvert par EST C169-scaffold_1 C169v2-00001 3777 - ORIGINAL JGI 55057 Genemark1.1_g 3777..3857,4046..4192,4443..4561,4940..5234,5406..5540,5734..5847,6009..6098,6421..6492 C169-scaffold_1 C169v2-00002 12682 - ORIGINAL JGI 55058 Genemark1.2_g 12682..12691,13195..13445,13694..13711 C169-scaffold_1 C169v2-00003 18095 + ORIGINAL JGI 31905 fgenesh1_kg.1_#_1_#_4092_1_CBOZ_CBPA 18095..18097,18280..18410,18690..18972 C169-scaffold_1 C169v2-00004 20452 + ORIGINAL JGI 6968 gw1.1.615.1 20452..20496,20636..20726,20881..21046,21194..21382,21567..21735
par exemple pour C169v2-00001 64 112
et pour Aster-03513 1192 1246.
et le deuxieme fichier ce sont les coordonnes genomiques que je remplis dans le dico en faisant +3
voici mon code:
Le souci que j'ai ce que pour un long fichier ca prend plus de temps et ma boucle ne s'arrete pas en remplissant mon dico.
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 #! /usr/bin/python #coding=utf-8 d = {} def search(idt,filename): with open(filename) as fichier: for line in fichier: if line[0]!='#': tab= line.split('\t') #print tab if(idt==tab[1]): return tab[7] return False with open('test.txt') as fichier: for line in fichier: index = line.split('\t') #print index s=search(index[0],'Coccomyxa_C169_v2_ORDERED-LIST-OF-CDS') tabs=s.split(",") flag=0 for l in tabs: mini,maxi=l.split("..") if flag==0: tmp=int(mini) cpt=1 while(tmp!=int(maxi)): d[cpt]=tmp #print tmp tmp=tmp+3 cpt=cpt+1 flag=1 else: tmp=int(mini)+cpt #print tmp while (tmp!=int(maxi)): d[cpt]=tmp tmp=tmp+3 cpt=cpt+1 if index[2] in d.keys() and index[3] in d.keys(): print d[index[2]]
Est ce que vous avez une idee plus simple, car a chaque fois que je lance le programme ca me plante l'ordi lol !
Je pense que le souci vient du else: car j'ai fait des tests mais ca plante dans la boucle
Car on m'ai dit que c'est simple en perl mais je m'y connais pas du tout
Merci
Partager