-3

我有一个像这样行的文件:

NM_198212 chr7 + 115926679 115935830 115927071 11593344 2 115926679,115933260,(对此列感兴趣,这些数字被称为外显子开始) 115927221,115935830,(而这个,这些被称为外显子结束)

最后两列(逗号分隔的列)可以包含可变数量的整数。这意味着它可以有五个用逗号分隔的数字,甚至是 15。

如果我有文件的第一行,我会想要这样一行:

NM_198212|chr7(+):115926679-115935830|115926679-115927221,115933260-115935830(但这可以根据给定的开始和结束的数量继续)

在更简单的范围内:

近乎_???chr12 - 10 110 10 110 3 10,50,100, 20,60,110,

我希望该信息行的结尾是 10-20,50-60,100-110

如何编写代码以使我要输出的行的末尾包括其中的每一个,而不管数字的数量如何。

我有这段代码,如果有帮助的话,它将配对所有的开始和结束。

fp = (infile, 'r')
for line in fp:
   tokens = line.split()
   exonstarts = tokens[8][:-1].split(',')
   exonends = tokens[9][:-1].split(',')
   zipped = list(zip(exonstarts, exonends))

对于上面的示例,zipped 将是 [(10, 20), (50, 60), (100, 110)]。我的问题是如何将其合并到我想要的信息行中(我已经写了整个表达式,除了包含开始和结束的部分。

因此,我不知道如何将这些从列表中取出并转换为我想要的格式。

4

1 回答 1

2

不确定这是您所追求的,但是:

range_str = ",".join(["%s-%s" % item for item in zipped])

如果压缩 == [(10, 20), (50, 60), (100, 110)]

10-20,50-60,100-110
于 2012-04-28T01:52:26.557 回答