Ho due file
s3.txt: 1 10201 5 202 20 302 25 301 10502 20601 14 17s4.txt: 1 10 202 20 30
Sto cercando di abbinare col0 di entrambi i file e ottenere righe che rientrano nell'intervallo (compreso di se stesse) 10-20 e 20-30 come si vede nel file s4. file s4 ha coordinate che possono essere utilizzate come intervallo di riferimento (inizio e fine crom) e s3 ha un elenco di coordinate da una condizione sperimentale, ciò che sto cercando di ottenere è a quali coordinate dal mio file s3 cadono su o tra le mie coordinate di riferimento in s4.
codice fino ad ora:
Contain_ranges = [] con open ('s4.txt', 'r') come f: for line in f: fields = line. strip (). split ('\ t') contenente_ranges.append (campi) intervallo_estato = [] con open ('s3.txt', 'r') come f: per riga in f: fields = line.strip (). split ('\ t') intervallo_estato.append (campi) per intervallo_c in intervallo_contenente: per intervallo_t in intervallo_stato: tst = int (intervallo_t [1]) ten = int (intervallo_t [2]) cst = int (intervallo_c [1]) cen = int (c_range [2]) if c_range [0] == t_range [0]: included = cst > = tst and cen < = ten if included == True: print t_range
Output con riga mancante (1 14 17):
['1', '10', '20'] ['1', '5', '20'] ['1 "," 10 "," 50 "] [" 2 "," 20 "," 30 "] [" 2 "," 20 "," 60 "]
Output desiderato:
1 10 202 20 302 25 301 14 17
Non so se la mia logica è sbagliata e perché manca 14-17 come ho t è compreso tra 10-20
[EDIT] utilizzando pybedtools>>> print (s4.intersect (s3, wb = True)) 1 10 20 1 10201 10 20 1 5201 10 20 1 10501 14 17 1 14172 20 30 2 20302 25 30 2 25302 20 30 2 20 60>>> print (s4.intersect (s3, wa = True, wb = True, F = 1)) 1 10 20 1 10201 10 20 1 14172 20 30 2 20 30
2 20 30 2 25 30usando bedops bin $ less answer. Bed 1 5201 10201 10501 14172 20302 20602 25 30usando codice @bli (su python2.7) ('1', 10, 20) ('1' , 14, 17) ('2', 20, 30) ('2', 25, 30) perché non riesco a vedere l'intervallo 1 5 20