間boundry範囲の重複を取り除くためにどのように私は、その内部に、このようなファイルがあります:パイソン - ライン
1 33725 36725 ENHANCER0002 1 711760 714760 ENHANCER0003 1 724150 727150 ENHANCER0004 1 725455 728455 ENHANCER0005 1 871280 874410 ENHANCER0006 1 874180 877180 ENHANCER0007 1 900540 903540 ENHANCER0008 1 901475 904475 ENHANCER0009 1 910260 913260 ENHANCER00010 1 933355 936355 ENHANCER00011 1 947660 950660 ENHANCER00012 1 1013530 1016530 ENHANCER00013 . . . 1 2477030 2480030 ENHANCER00043 1 2478160 2481160 ENHANCER00044 1 2478845 2481845 ENHANCER00045
真ん中の2つの列が私の下限と上限境界であるが。ライン3-4またはライン5-6と同様に、境界は重なり合う。境界線が重なると、最も低い境界線と最も高い境界線のみが印刷されます。私はこのようなソリューションのためのPythonでの作業とここに私のコードでいます:
def write_line(chr_no,tmp_l,tmp_h,cnt,filename):
filename.write(str(chr_no)+"\t"+str(tmp_l)+"\t"+str(tmp_h)+"\t"+"ENHANCER000"+str(cnt)+"\n")
inf = open("/home/firat/Desktop/Onder_Lab/Kenan/enhancers_bj.bed","r")
outf = open("/home/firat/Desktop/deneme_v3.bed","w")
cnt = 0
tmp_l=0
tmp_h=0
tmp_list = []
for line in inf:
cnt += 1
line = line.split(' ')
current_low = line[1]
current_high = line[2]
previous_low = tmp_l
previous_high = tmp_h
if (int(current_low) <= int(previous_high)):
tmp_list.append(int(current_low))
tmp_list.append(int(current_high))
tmp_list.append(int(previous_low))
tmp_list.append(int(previous_high))
write_line(line[0],min(tmp_list),max(tmp_list),cnt,outf)
tmp_l = min(tmp_list)
tmp_h = max(tmp_list)
tmp_list = []
else:
write_line(line[0], previous_low, previous_high, cnt, outf)
tmp_l= current_low
tmp_h= current_high
私の解決策が効果的に見えますが、出力はこのようです:気づいたよう
1 27460 30460 ENHANCER0002 1 33725 36725 ENHANCER0003 1 711760 714760 ENHANCER0004 1 724150 728455 ENHANCER0005 1 724150 728455 ENHANCER0006 1 871280 877180 ENHANCER0007 1 871280 877180 ENHANCER0008 1 900540 904475 ENHANCER0009 1 900540 904475 ENHANCER00010 1 910260 913260 ENHANCER00011 1 933355 936355 ENHANCER00012 1 947660 950660 ENHANCER00013 1 1013530 1016530 ENHANCER00014 . . . 1 2477030 2481160 ENHANCER00044 1 2477030 2481845 ENHANCER00045 1 2477030 2481845 ENHANCER00046
がある場合、重複が印刷にあり境界の重なり。最下部と同様に3本の線が重なる場合もあります。
1 27460 30460 ENHANCER0002 1 33725 36725 ENHANCER0003 1 711760 714760 ENHANCER0004 1 724150 728455 ENHANCER0005 1 871280 877180 ENHANCER0006 1 900540 904475 ENHANCER0007 1 910260 913260 ENHANCER0008 . . . 1 2477030 2481845 ENHANCER00046
私のコードの何が問題であり、私はそれがより-より-2ラインが重なる場合であっても操作方法を改善することができます:期待される出力は次のようにすべきですか?