从位置列表创建间隔

2024-04-20 01:13:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我又碰到了一些套子。我有一个这样的文件:

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

这里的问题是我的文件中有太多的条目,我想把它们减少到开始:结束间隔以以下方式(至少这是我能想到的最好的方式): 使用第一列进行排序,然后仅使用第二列并减少它。我的意思是,如果条目列表从142开始,保持最低和最高条目作为起始、结束位置。然后移动到145*个位置并做同样的操作。所以基本上是为那些在视觉上彼此分离的条目集创建开始,结束位置。 我们最终或多或少会得到:

chr1    142936580 142936592
chr1    145034453 145034459
chr1    161418656 161418658
chr2    90386745 90386748

这是我的主意。然而,我被困在点什么代码使用。 即使是建议也是好的 谢谢, 艾瑞克


Tags: 文件代码列表间隔排序方式条目视觉
2条回答

您可以在文件中循环并跟踪特定范围内的第一个和最后一个数字。您可以通过转换为整数然后除以10的幂来提取范围。使用字典存储范围的最低值和最高值。你知道吗

如果我明白了,你要把连续的间隔组合起来。 我的提议

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 

你可以把它放在函数中并产生行,或者写在另一个文件中,等等。。。。你知道吗

编辑:现在最小的差异是一个常数

相关问题 更多 >