返回具体单词的位置

2024-05-19 23:03:18 发布

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

我有档案。看起来像这样

# AA        : amino acid sequence                                      #
# OBS_sec   : observed secondary structure: H=helix, E=extended        #
#             (sheet), blank=other (loop)                              #
# PROF_sec  : PROF predicted secondary structure: H=helix, E=extended  #
#             (sheet), blank=other (loop)                              #
PHD htm |                  HHHHHHHHHHHHHHHHHHHHHH      HHHHHHHHHHHHHH|
PROF_sec |EEEEE     HHHHHHHHHHH   EEEEEE   HHHHHHHHHH    EEEEEEEEE    |

我想知道以“PROF|u sec”开始的那一行,然后返回H和E的位置,在|..|。你知道吗

我这样写代码

rexp = re.compile('(?#...)^[PROF_sec][H]+[E]+')
List = [(n.start(0), n.end(0)) for n in rexp.finditer(file)]

但它返回空值。你知道吗

如何修改代码?你知道吗

另外,文件中的所有内容只在一行中考虑。例如,最后一个“eeeeeee”将给出输出(493502)


Tags: 代码loopextended档案secstructuresheetaa
1条回答
网友
1楼 · 发布于 2024-05-19 23:03:18

您可以使用str.startswith开始要得到您想要的行,请将每个行的总长度保持到该点,然后使用正则表达式得到H和E子字符串:

import re

h, e = re.compile("H+"), re.compile("E+")

with open("in.txt") as f:
    for line in f:
        if line.startswith("PROF_sec"):
            print([(s.start() +sm, s.end()+ sm) for s in h.finditer(line)])
            print([(s.start()+sm, s.end()+sm) for s in e.finditer(line)])
            break
        sm += len(line)

这将给你:

[(446, 451), (470, 476), (493, 502)]
[(456, 467), (479, 489)]

相关问题 更多 >