如果嵌套的'for'循环内的语句只评估一次 - python

时间:2012-03-22 19:30:15

标签: python if-statement for-loop nested-loops

我正在编写一个代码,用于将file1(单个条目列)与文件2(3列条目)进行比较,并根据第一列从文件2中获取匹配的记录。问题是它只评估循环一次。

File1中:

ABC

DEF

JKL

文件2:

IJK,123,SDF

ABC,456,HJK

QWE,876,GFT

JKL,098,HGF

.....

我的代码:

for entry in fh_file1:
    mir = entry.strip('\n')
    print(mir)
    for row in fh_file2:
        row_splt = row.split(',')             
        print(row_splt[0])
        if mir in row_splt[0]:
            print (row.strip('\n'))
        else:
            pass

该代码的结果:

只是文件1的第一个条目的匹配:

ABC 456 HJK

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:4)

文件是数据流。当你循环它们时,你一次读一行。在内循环结束时,该文件已到达结尾。它不会在外部循环的下一次迭代开始时再次启动,因为这不是文件的工作方式。

您通常应首先将文件读入内存:list(fh_file1)会为您提供list行,您可以根据需要循环多次。

答案 1 :(得分:3)

您需要在第二个fh_file2.seek(0)循环之前添加for,以便在文件开头重新开始。

然而,通过将其读入内存一次,您会得到更好的服务:

file2_lines = fh.file2.readlines()

然后迭代file2_lines。从磁盘读取另一个文件中每一行的文件将会非常慢。