在fi中循环时,文件操作从第一个开始重新开始

2024-04-25 09:06:18 发布

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

我试图在文件中找到某个单词,并希望在满足条件时打印下一行。你知道吗

f = open('/path/to/file.txt','r')
lines = f.readlines()
for line in lines:
    if 'P/E' in line:
        n = lines.index(line) #get index of current line
        print(lines[n+1])     #print the next line
a.close()

字符串“p/E”将在文件中出现4次,每次出现在不同的行中。你知道吗

执行时,代码通常在前两次出现“p/E”后打印下一行。然后它再次返回并再次打印相同的前2个匹配项并退出。循环在前两次出现之后不会继续;它有点重复这个过程并退出。你知道吗

我检查了数据文件,看我的输出是否是实际结果,但在“p/E”之后,接下来的所有行都不同。你知道吗

我如何解决这个问题?谢谢。你知道吗


Tags: 文件topathintxtforindexif
1条回答
网友
1楼 · 发布于 2024-04-25 09:06:18

list.index()只使用一个参数,只找到第一次出现的。您必须给它一个起点来查找超过上一个索引的元素,list.index()接受第二个参数,告诉它从何处开始搜索。你知道吗

但是,您不需要使用lines.index();这非常低效;它需要对列表进行全面扫描,测试每一行直到找到匹配项。你知道吗

只需使用^{} function在循环时添加索引

for index, line in enumerate(lines):
    if 'P/E' in line:
        print(lines[index + 1])

小心,有可能index + 1不是有效的索引;如果在lines列表的最后一行找到'P/E',您将得到一个IndexError。您可能需要添加and index + 1 < len(lines)测试。你知道吗

请注意,使用file.readlines()可以一次性将所有文件读入内存。尽量避免这种情况;您可以直接在文件上循环,并记住前面的行:

with open('/path/to/file.txt','r') as f:
    previous = ''
    for line in f:
        if 'P/E' in previous:
            print(line)  # print this line
        previous = line  # remember for the next iteration

相关问题 更多 >