我有一个包含这样的行的文件:
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)]。我的问题是如何将它合并到我想要的信息行中(除了包含开头和结尾的部分之外,我写了整个表达式。
因此,我不知道如何将这些从列表中删除并转换为我想要的格式。
答案 0 :(得分:2)
不确定这是你所追求的,但是:
range_str = ",".join(["%s-%s" % item for item in zipped])
如果压缩== [(10,20),(50,60),(100,110)]
10-20,50-60,100-110