我正在编写一个代码,用于将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
请帮我解决这个问题。
答案 0 :(得分:4)
文件是数据流。当你循环它们时,你一次读一行。在内循环结束时,该文件已到达结尾。它不会在外部循环的下一次迭代开始时再次启动,因为这不是文件的工作方式。
您通常应首先将文件读入内存:list(fh_file1)
会为您提供list
行,您可以根据需要循环多次。
答案 1 :(得分:3)
您需要在第二个fh_file2.seek(0)
循环之前添加for
,以便在文件开头重新开始。
然而,通过将其读入内存一次,您会得到更好的服务:
file2_lines = fh.file2.readlines()
然后迭代file2_lines
。从磁盘读取另一个文件中每一行的文件将会非常慢。