Partage
  • Partager sur Facebook
  • Partager sur Twitter

perdu dans les donnees

Sujet résolu
    22 février 2011 à 16:48:08

    Bonjour,
    je suis perdu dans mom algorithme.
    Je suis parti d'un fichier
    C169v2-00002	Aster-06787	187	262	561	636       
    C169v2-04487	Aster-06725	92	235	216	357
    C169v2-04480	Aster-06724	371	431	4	64
    C169v2-04481	Aster-06792	2	447	41	488	
    C169v2-03069	Aster-04749	21	283	2	265
    C169v2-03068	Aster-01309	8	222	41	248
    C169v2-03061	Aster-06908	100	396	399	708
    


    et d' un fichier qu'on va nommer coco_cds:
    # 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,18280..18410
    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
    C169-scaffold_1	C169v2-00005	21893	-	ORIGINAL JGI	34662	fgenesh1_pm.1_#_3	21893..22051,22201..22293,22590..22747,22864..23102,23192..23364
    C169-scaffold_8	C169v2-04488	528365	+	ORIGINAL JGI	63423	Genemark1.4206_g	528365..528435,528774..528938,529294..529389,529779..530001,530348..530487,530870..530990
    C169-scaffold_8	C169v2-04487	523752	+	ORIGINAL JGI	42018	fgenesh1_pg.8_#_66	523752..523949,524383..524517,524819..524948,525371..525456,525763..525830,526605..526740,527270..527305
    C169-scaffold_5	C169v2-03069	1412897	+	ORIGINAL JGI	41001	fgenesh1_pg.5_#_204	1412897..1412909,1413103..1413155,1413409..1413531,1413634..1413748,1414228..1414427,1414721..1414891,1415181..1415381,1415548..1415679
    


    et d'un autre ayant la meme forme nommer atser_cds:

    # 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
    scaffold_00001	Aster-00001	17594	-	ORIGINAL JGI	14863	gw1.00001.44.1	17594..17852,17997..18023,18357..18572,18689..18759,18842..18967
    scaffold_00001	Aster-00002	19928	-	ORIGINAL JGI	21312	e_gw1.00001.25.1	19928..20186,20453..20616,20744..20792,20913..21081,21507..21714
    scaffold_00001	Aster-00003	31765	+	ORIGINAL JGI	14113	gw1.00001.37.1	31765..31855,32261..32514,32748..32831,32917..32998,33154..33362,33646..33753
    scaffold_00001	Aster-00004	44240	-	ORIGINAL JGI	36055	fgenesh1_pg.00001_#_3	44240..44511,44793..44943,45050..45133,45256..45318,45686..45721,45782..45904,46025..46342,46459..46642,46822..46871
    scaffold_00001	Aster-00005	48441	+	ORIGINAL JGI	21325	e_gw1.00001.70.1	48441..48583,48791..48920
    scaffold_00101	Aster-04749	530046	+	ORIGINAL JGI	29654	e_gw1.00101.62.1	530046..530292,530743..530942,531299..531488,531763..532046
    scaffold_00145	Aster-06787	986197	-	ORIGINAL JGI	41618	fgenesh1_pg.00145_#_90	986197..986425,986528..986722,986990..987130,988711..988816,990091..990181,990354..990470,990778..990805,991167..991259,991536..991663,991869..991991,992198..992278,992360..992594,993369..993481,993632..993868
    


    Mon but du programme est de partir du premier fichier recuperer le couple de chaque ligne C169v2-00002 Aster-06787 ainsi de suite, et ensuite d'aller dans les fichiers respectifs pour C169v2-00002 dans coco_cds et pour Aster-06787 dans atser_cds.
    Ensuite regarder si il existe bien dans ces fcihiers et puis regarder si cest brin + ou - car si cest - je fais un reverse mais je vous expliquerai par la suite.
    je recupere les coordonnes par un split je fais un calcul de la distance puis je recupere a chaue fois lindice impair pour recuperer sa valeur.


    Le but final etant de repartir decrir dans un fichier C169v2-00002 "ici le nombre de valeur recuperer pour ce coco " Aster-06787 "ici les nombres de valeur recuperer pour ce aster"

    voici mon code il est tres gros car comme je suis nouveau en python je ne sais pas comment faire plus simple car je voualais mettre dans des dictionnaiere comme ca cetait plus simple pour chaque aster ou coco je pouvais remplir le fichier rapidement voici mon code:

    #! /usr/bin/python
    
    
    #coding=utf-8
    
    coco=[]
    aster=[]
    b2=[]
    d1={}
    
    with open('essai1.txt') as fic:
    	for ligne in fic:
    		chaine1 = ligne.split('\t')[:1]
    		chaine2= ligne.split('\t')[1:2]
    		coco.append(chaine1)
    		aster.append(chaine2)
    
    
    def rev(l): 
        if len(l) == 0: return [] 
        return [l[-1]] + rev(l[:-1]) 
    
    with open('coco_cds.txt') as fichier:
    	for line in fichier:
    		ch= line.split('\t')[1:2]
    		#print ch
    		if ch in coco:
    			brin=line.split('\t')[3:4]
    			if '+'in brin:	
    				cv=line.split('\t')[1:2]
    				#print cv
    				coord1=line.split('\t')[7:8]
    				#print coord1
    				#print sum([i.split('..')+[','] for i in coord[0].split(',')],[])
    				d=[(int(j)-int(i))/3 for i, j in [i.split("..") for i in coord1[0].split(",")]]#calcul de la distance
    				
    				#print d
    				b = [1]
    				for i in d:
        					 b.append(b[-1]+i)
       					 b.append(b[-1]+1)
    				b.remove(b[-1])
    				
    			        #print b
    				b2=[]
    				for i in range(len(b)):
    					 	
    					 if (i%2!=0):
    						
    						
    						b2.append(b[i])
    						#print b2
    				
    			else:
    				cv2=line.split('\t')[1:2]
    				coord2=line.split('\t')[7:8]
    				#print coord2
    				a= [(int(j)-int(i))/3 for i, j in [i.split("..") for i in coord2[0].split(",")]]#calcul de la distance
    			 	rev(a)
    				c=[1]
    				for i in a:
        					 c.append(c[-1]+i)
       					 c.append(c[-1]+1)
    				c.remove(c[-1])
    				
    				for i in range(len(c)):
    					 	
    					 if (i%2!=0):#impair
    						b2.append(c[i])
    	
    
    with open('coco_cds.txt') as fichier:	        
    				for line in fichier:
    					ch= line.split('\t')[1:2]
    						if ch in aster:
    							brin=line.split('\t')[3:4]
    							if '+'in brin:	
    				cv=line.split('\t')[1:2]
    				#print cv
    				coord1=line.split('\t')[7:8]
    				#print coord1
    				#print sum([i.split('..')+[','] for i in coord[0].split(',')],[])
    				d=[(int(j)-int(i))/3 for i, j in [i.split("..") for i in coord1[0].split(",")]]#calcul de la distance
    				
    				#print d
    				b = [1]
    				for i in d:
        					 b.append(b[-1]+i)
       					 b.append(b[-1]+1)
    				b.remove(b[-1])
    				
    			        #print b
    				b2=[]
    				for i in range(len(b)):
    					 	
    					 if (i%2!=0):#impair
    						
    						
    						b2.append(b[i])
    						#print b2
    				
    			else:
    				cv2=line.split('\t')[1:2]
    				coord2=line.split('\t')[7:8]
    				#print coord2
    				a= [(int(j)-int(i))/3 for i, j in [i.split("..") for i in coord2[0].split(",")]]#calcul de la distance
    			 	rev(a)
    				c=[1]
    				for i in a:
        					 c.append(c[-1]+i)
       					 c.append(c[-1]+1)
    				c.remove(c[-1])
    				
    				for i in range(len(c)):
    					 	
    					 if (i%2!=0):#impair
    						b2.append(c[i])
    



    voila le code que j'ai pu reduire
    #! /usr/bin/python
    
    
    #coding=utf-8
    
    coco=[]
    aster=[]
    
    d1={}
    
    
    
    
    def rev(l): 
        if len(l) == 0: return [] 
        return [l[-1]] + rev(l[:-1]) 
    
    
    
    def brin(line):
          T=line.split('\t')[3:4]
          
          if '+' in T:
    	    
                r = brin_plus(line)
          else:
    	   	
                r = brin_moins(line)
          c = []
          for i in range(len(r)):
                     if ( i%2 != 0): c.append(r[i])
          return c
    
    #def nom(fic):
    #	with open(fic) as fichier:
    #		for line in fichier:
     #       		name = line.split('\t')[1:2]
    #	return name
    
    with open('essai1.txt') as fic:
    	for ligne in fic:
    		chaine1 = ligne.split('\t')[:1]
    		chaine2= ligne.split('\t')[1:2]
    		coco.append(chaine1)
    		aster.append(chaine2)
    
    
    
    
    	
    
    
    
    with open('coco_cds.txt') as fichier:
        for line in fichier:
            ch= line.split('\t')[1:2]
    	#print ch
    	if ch in coco or ch in aster:
                r = brin(line)
                for i in range(len(r)):
                     b2.append(r[i])
    


    mais jai un souci avec brin plus et ;oins car je narrive pas a les definir
    • Partager sur Facebook
    • Partager sur Twitter

    perdu dans les donnees

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown