我需要能够比较两个坐标(一行中的第二个和第三个单词)以查看它们重叠的位置。现在,我的代码完成了它,但它的速度非常慢。到目前为止,对于10000行的文件,我的代码大约需要两分钟。我需要将它用于一个包含30亿行的文件,我估计这将是永远的。有没有办法重构我的代码更快?
到目前为止,我可以完全按照自己的意愿行事。这是:
import os.path
with open("Output.txt", "w") as result:
with open("bedgraph2.txt") as file1:
for f1_line in file1:
segment_1 = f1_line.split()
with open("bedgraph1.txt") as file2:
for f2_line in file2:
segment_2 = f2_line.split()
if (int(segment_1[2]) > int(segment_2[1])) & (int(segment_1[1]) < int(segment_2[2])):
with open("Output.txt", "a") as add:
add.write(segment_1[0])
add.write(" ")
add.write(segment_1[1])
add.write(" ")
add.write(segment_1[2])
add.write(" ")
add.write(segment_1[3])
add.write(" | ")
add.write(segment_2[0])
add.write(" ")
add.write(segment_2[1])
add.write(" ")
add.write(segment_2[2])
add.write(" ")
add.write(segment_2[3])
add.write("\n")
break
print "done"
这是数据样本
bedgraph2.txt
chr01 1780 1795 -0.811494
chr01 1795 1809 -1.622988
chr01 1809 1829 -2.434482
chr01 1829 1830 -3.245976
chr01 1830 1845 -2.434482
chr01 1845 1859 -1.622988
chr01 1859 1879 -0.811494
chr01 1934 1984 -0.811494
chr01 3550 3600 -0.811494
chr01 3790 3840 -0.811494
chr01 3882 3902 -0.811494
chr01 3902 3932 -1.622988
bedgraph1.txt
chr01 1809 1859 -1.139687
chr01 1965 2015 -1.139687
chr01 3790 3840 -1.139687
chr01 3930 3942 -1.139687
chr01 3942 3980 -2.279375
chr01 3980 3992 -1.139687
chr01 4260 4310 -1.139687
chr01 4361 4382 -1.139687
chr01 4382 4411 -2.279375
chr01 4411 4432 -1.139687
chr01 4473 4523 -1.139687
chr01 4605 4655 -1.139687
提前致谢
答案 0 :(得分:2)
我建议使用bedtools:
http://bedtools.readthedocs.org/en/latest/
相交功能可能会做你想要的。
另外,使用bedtools,可以通过首先对两个输入文件进行排序来改进算法。