找到线,然后得到下一个lin

2024-06-01 01:01:49 发布

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

我有以下问题: 我打开一个文件,逐行阅读,寻找一个特定的模式。当我找到它时,我想把整行代码和接下来的两行代码写到一个新文件中。问题是我不知道如何从我找到的那条线到下一条2。在

AAA
XXX
XXX
BBB
XXX
XXX
CCC
XXX
XXX

在这个例子中,我会找到“BBB”,我想得到下两行。在

我能做什么?非常感谢你的帮助!在

编辑:我意识到我必须更准确地问。在

这是我同事的密码

^{pr2}$

对于每一个k in range,我想将k, k+1, k+2写入ftrj文件。 哪种方法最好?在

编辑2:对不起,但我意识到我犯了一个错误。你的建议奏效了,但我意识到我必须在代码的另一部分中包含它。在

for line in lines[model[i]:model[i+1]]:
    if line.startswith('ATOM'):
    resi=line[22:26]
    resn=line[17:20]
    atn=line[12:16]
    crd=[float(line[31:38]),float(line[38:46]),float(line[46:54])]

    if (resn in noprot)==False and atn.strip().startswith('CA')==True:
        protcrd.append(crd)
    if (resn in reswat)==True and (atn.strip() in atwat)==True:
        watcrd.append(crd)
        watline.append(line)

我会这样想:

    (...)
    if (resn in reswat)==True and (atn.strip() in atwat)==True:
        watcrd.append(crd)
        watline.append(line)
        for i in range(1, 3):
            try:
                watcrd.append(crd[line + i])
                watline.append(line[line + i])
            except IndexError:
                break

但它不起作用。如何指示要附加到此列表的部件和行?在


Tags: and文件代码intrueiflinefloat
1条回答
网友
1楼 · 发布于 2024-06-01 01:01:49

Python文件对象是迭代器,您可以随时请求下一行:

with open(inputfilename) as infh:
    for line in infh:
        if line.strip() == 'BBB':
            # Get next to lines:
            print next(infh)
            print next(infh)

这里^{} functioninfh迭代器推进到下一行,返回该行。在

但是,您不是在处理文件,而是在处理列表;您始终可以访问列表中的后续索引:

^{pr2}$

相关问题 更多 >