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	243
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
Le premier fichier ces les positions pour chaque proteine
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:
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]]
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.
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