在循环遍历文件时,文件操作从第一次开始

时间:2017-01-14 16:07:27

标签: python file-io

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

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'之后打印下一行。一般。然后再次返回并再次打印相同的前两次并退出。在前两次出现之后,循环没有进行;它有点重复这个过程并退出。

我检查了数据文件以查看我的输出是否是实际结果,但在' P / E'之后所有下一行都不同。

我该如何解决这个问题?感谢。

1 个答案:

答案 0 :(得分:2)

只有一个参数的

list.index()只能找到第一个出现次数。你必须给它一个起点来找到超过上一个索引的元素,list.index()采用第二个参数来告诉它从哪里开始搜索。

但是,您不需要使用lines.index();那是非常低效的;它需要对列表进行全面扫描,测试每一行,直到找到匹配为止。

在循环时,只需使用enumerate() function添加索引

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

小心,index + 1有可能不是有效的索引;如果您在'P/E'列表的最后一行找到lines,则会获得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