Ich habe zwei Dateien
s3.txt: 1 10 201 5 202 20 302 25 301 10 502 20 601 14 17s4.txt: 1 10 202 20 30
Ich versuche, col0 beider Dateien abzugleichen und Zeilen zu erhalten, die zwischen dem Bereich (einschließlich ihrer selbst) 10-20 und 20-30 liegen, wie in s4 gezeigt. file.file s4 hat Koordinaten, die als verwendet werden können Referenzbereich (Chrom Anfang und Ende) und s3 enthält eine Liste von Koordinaten aus einer experimentellen Bedingung. Ich versuche zu erreichen, auf welche Koordinaten aus meiner Datei s3 auf oder zwischen meine Referenzkoordinaten in s4 fallen.
bisheriger Code:
enthält_ranges = [] mit open ('s4.txt', 'r') als f: für Zeile in f: fields = Zeile. strip (). split ('\ t') enthält_ranges.append (Felder) getestete_ranges = [] mit open ('s3.txt', 'r') als f: für Zeile in f: fields = line.strip (). split ('\ t') testing_ranges.append (Felder) für c_range in enthaltenden Bereichen: für t_range in getesteten Bereichen: tst = int (t_range [1]) ten = int (t_range [2]) cst = int (c_range [1]) cen = int (c_range [2]) wenn c_range [0] == t_range [0]: eingeschlossen = cst > = tst und cen < = zehn wenn enthalten == True: print t_range
Ausgabe mit fehlender Zeile (1 14 17):
['1', '10', '20'] ['1', '5', '20'] ['1 ',' 10 ',' 50 '] [' 2 ',' 20 ',' 30 '] [' 2 ',' 20 ',' 60 ']
Gewünschte Ausgabe:
1 10 202 20 302 25 301 14 17
Ich bin mir nicht sicher, ob meine Logik falsch ist und warum 14-17 als i fehlt t liegt zwischen 10-20
[EDIT] unter Verwendung von pybedtools>>> print (s4.intersect (s3, wb = True)) 1 10 20 1 10 201 10 20 1 5 201 10 20 1 10 501 14 17 1 14 172 20 30 2 20 302 25 30 2 25 302 20 30 2 20 60>>> print (s4.intersect (s3, wa = True, wb = True, F = 1)) 1 10 20 1 10 201 10 20 1 14 172 20 30 2 20 30
2 20 30 2 25 30 Verwenden von Bedops bin $ less answer.bed 1 5 201 10 201 10 501 14 172 20 302 20 602 25 30 Verwenden von @ bli-Code (auf Python2.7) ('1', 10, 20) ('1') , 14, 17) ('2', 20, 30) ('2', 25, 30) Warum kann ich das Intervall 1 5 20
nicht sehen?