从Python中选择带有Phobius输出的序列区域

时间:2018-04-19 14:21:51

标签: python string python-3.x

我需要使用某个程序来验证我的一些结果。我是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> 1,我想要数字。 0 输出我需要:

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

最好是单独的值,例如:

first_number = 34
second_number = 53

因为我将使用循环,所以无论如何都会覆盖这些值。总结一下:我需要o和i之间的最后一个区域,反之亦然,需要非常多变的字符串(长度和构图)。 麻烦:如果我只搜索(例如使用正则表达式)o和i之间的最后一个区域,我有时会选错区域。

1 个答案:

答案 0 :(得分:1)

如果Phobius输出存储在文件中,请将“Phobius_output”更改为您的文件名,则以下代码应该有效:

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)