是我写的脚本的一部分,我在if语句中遇到了问题。 如果我想使用re.match('ATOM | MODEL',lines [i]),我收到错误信息。删除re.match中的“| MODEL”,它会起作用。 任何人都可以给我一些提示,为什么会这样?非常感谢你!
new_pdb=open(pdb_out,'w')
i=0
while (i<len(lines)):
frag=lines[i].split()
# do not know why 'ATOM|MODEL' does not work
if (re.match('ATOM',lines[i]) and "H" not in frag[2]):
new_pdb.write(lines[i])
i=i+1
new_pdb.close()
下面是我使用re.match('ATOM | MODEL',lines [i])时的错误消息:
追踪(最近一次通话): 文件“nonh-1.py”,第17行,in if(re.match('ATOM | MODEL',lines [i])和“H”不在frag [2]中): IndexError:列表索引超出范围
答案 0 :(得分:1)
以lines
开头的MODEL
中至少有一个包含少于三个以空格分隔的项目,因此frag[2]
失败。如果从正则表达式中删除|MODEL
,则re.match()
会失败,因此Python甚至不会尝试评估frag[2]
,这就是错误在该情况下不会发生的原因。
除此之外,你不应该使用lines
循环迭代while
- Python不是C.使用
for line in lines:
frag = line.split()
if (re.match('ATOM',line) and "H" not in frag[2]):
new_pdb.write(line)