我又遇到了一些小问题。我有一个看起来像这样的文件:
chr1 142936580 142936581 209
chr1 142936581 142936582 208
chr1 142936582 142936583 212
chr1 142936583 142936584 210
chr1 142936588 142936590 215
chr1 142936590 142936591 217
chr1 142936591 142936592 221
chr1 142936592 142936593 220
chr1 145034453 145034454 222
chr1 145034454 145034455 220
chr1 145034455 145034456 218
chr1 145034456 145034457 215
chr1 145034457 145034459 216
chr1 145034459 145034460 212
chr1 161418656 161418657 178
chr1 161418657 161418658 177
chr1 161418658 161418659 179
chr2 90386745 90386747 222
chr2 90386747 90386748 221
chr2 90386748 90386750 220
这里的问题是我的文件中有太多条目,我想减少它们开始:以下列方式结束间隔(至少这是我能想到的最好的): 使用第一列排序,然后仅使用第二列并减少它。我的意思是,如果条目lis在从142开始的范围内,则保持最低和最高条目作为开始,结束位置。然后移动到145 *位置并做同样的事情。因此,基本上为那些彼此间隔开的条目组创建开始,结束位置。 我们最终会或多或少地结束:
chr1 142936580 142936592
chr1 145034453 145034459
chr1 161418656 161418658
chr2 90386745 90386748
多数民众赞成我的想法如何做到这一点。但是,我仍然坚持使用什么代码。 甚至建议都很好 谢谢, 伊雷克
答案 0 :(得分:1)
如果我理解,你想组合连续的间隔。 我的提案
from csv import reader
LIMITINTER= 10
with open("fichierin.txt") as f:
read = reader(f,delimiter="\t")
first = last = None
for line in read:
if last is None:
first = last = line
else:
if abs(int(line[1]) - int(last[2])) < LIMITINTER :
last = line
continue
else:
print last[0], first[1], last[2]
first = last = line
print last[0], first[1], last[2]
你会有
chr1 142936580 142936593
chr1 145034453 145034460
chr1 161418656 161418659
chr2 90386745 90386750
你可以把它放在功能和产生线,或写在另一个文件等....
编辑:现在最小差异是常数
答案 1 :(得分:0)
您可以遍历文件并跟踪特定范围内的第一个和最后一个数字。您可以通过转换为整数然后除以10的幂来提取范围。使用字典存储范围的最低值和最高值。