在Python中从带有恐惧输出的序列中选择区域

2024-10-01 00:14:04 发布

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

我需要使用一个特定的程序来验证我的一些结果。我对Python比较陌生。每个条目的输出都非常不同,请参见下面的snippit:

SEQENCE ID                              TM SP PREDICTION
YOL154W_Q12512_Saccharomyces_cerevisiae  0  Y n8-15c20/21o
YDR481C_P11491_Saccharomyces_cerevisiae  1  0 i34-53o
YAL007C_P39704_Saccharomyces_cerevisiae  1  Y n5-20c25/26o181-207i
YAR028W_P39548_Saccharomyces_cerevisiae  2  0 i51-69o75-97i
YBL040C_P18414_Saccharomyces_cerevisiae  7  0 o6-26i38-56o62-80i101-119o125-143i155-174o186-206i
YBR106W_P38264_Saccharomyces_cerevisiae  1  0 o28-47i
YBR287W_P38355_Saccharomyces_cerevisiae  8  0 o12-32i44-63o69-90i258-275o295-315i327-351o363-385i397-421o

所以,我需要最后一个跨膜区域,在这种情况下,它总是o和I之间的最后一个数字,反之亦然。如果TM=0,就没有跨膜区,所以我想要TM>;0时的数字 我需要的输出:

34-53
181-207
75-97
186-206
28-47
397-421

最好是单独的值,如:

first_number = 34
second_number = 53

因为我将使用一个循环的值将被覆盖无论如何。总而言之:我需要o和I之间的最后一个区域,或者反之亦然,具有非常可变的字符串(长度和组成)。 麻烦:如果我只是搜索(例如用正则表达式)o和I之间的最后一个区域,我有时会选错区域。你知道吗


Tags: 程序目的id区域number数字sptm
1条回答
网友
1楼 · 发布于 2024-10-01 00:14:04

如果恐惧输出存储在文件中,请将“恐惧输出”更改为您的文件名,那么以下代码应该可以工作:

import re

last_transmembrane_regions = []

with open("Phobius_output") as file:
    for line in file.readlines()[1:]:
        tm = int(line.split()[1])
        if tm > 0:
            last_region = re.search("[io](.*?)[io]", line.split()[-1][::-1]).group(1)[::-1]
            last_transmembrane_regions.append(last_region)

for region in last_transmembrane_regions: #this can also be done in the previous loop for better performance
    first_number, second_number = region.split("-") #use int() if you want integers
    print(region, first_number, second_number)

相关问题 更多 >