我需要使用某个程序来验证我的一些结果。我是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之间的最后一个区域,我有时会选错区域。
答案 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)