我有一个档案。看起来像这样
# 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_sec”开头的行,然后返回里面| .... |的H和E的位置。
我写了这样的代码
rexp = re.compile('(?#...)^[PROF_sec][H]+[E]+')
List = [(n.start(0), n.end(0)) for n in rexp.finditer(file)]
但它返回null值。
如何修改代码?
PS。文件中的所有内容仅考虑在一行中。例如,最后一个“EEEEEEEEE”将给出输出(493,502)
答案 0 :(得分:0)
你可以使用 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)]