python - 在 Python 中使用 Phobius 输出从序列中选择区域

标签 python string python-3.x

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

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 之间的最后一个区域,有时会选择错误的区域。

最佳答案

如果 Phobius 输出存储在文件中,将 'Phobius_output' 更改为路径,则以下代码应给出预期结果:

with open('Phobius_output') as file:
    for line in file.readlines()[1:]:
        if int(line.split()[1]) > 0:
            prediction = line.split()[3]
            i_idx, o_idx = prediction.rfind('i'), prediction.rfind('o')
            last_region = prediction[i_idx + 1:o_idx] if i_idx < o_idx else prediction[o_idx + 1:i_idx]
            first_number, second_number = map(int, last_region.split('-'))
            print(last_region)

关于python - 在 Python 中使用 Phobius 输出从序列中选择区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49923479/

相关文章:

c - 指向字符串 C 的指针

python - 如何使用 Python 查询 MySQL 数据快照?

python - 在 python 3.5.x 中使用 `urllib` 意外加载模块

java - 使用相同的字符串部分进行正则表达式检查

c - 读取系统调用不检测文件结束

python - 为什么我在 pip 安装模块时得到这些 "WARNING: Target Directory <directory> already exists."?

python-3.x - Django Rest Framework 在 Azure 上非常慢

django - 如何更改字段类型并保留模型 django 3.0 中定义的选择

python - 手动将 RGB 转换为灰度

python - 将常用文件导入到 Sage