添加一行代码以生成序列行(python)

时间:2012-04-28 01:18:50

标签: python

我有一个包含这样的行的文件:

NM_198212 chr7 + 115926679 115935830 115927071 11593344 2 115926679,115933260,(感兴趣的是这一栏,这些数字被称为外显子开始)115927221,115935830,(和这一个,这些被称为外显子末端)

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

如果我有文件的第一行,我想要一条看起来像这样的行:

  
    

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

  

更简单的比例:

NM _ ???? 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)]。我的问题是如何将它合并到我想要的信息行中(除了包含开头和结尾的部分之外,我写了整个表达式。

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

1 个答案:

答案 0 :(得分:2)

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

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

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

10-20,50-60,100-110