当前,这段代码为我提供了searchfile
中所有行一次。但是据我的新手了解,它应该为每searchfile
行打印出infile
的所有行!
searchfile = open('.\sometext.txt', 'r')
infile = open('.\somefile', 'r')
for line1 in infile:
for line2 in searchfile:
print line2
searchfile.close()
infile.close()
我尝试使用searchfile.readlines()
创建一个列表,以打印所有infile
行的所有searchfile
行,但是仍然无法正常工作。有人有线索吗?
答案 0 :(得分:6)
我想searchfile
是您先前打开的文件,例如。 G。 searchfile = open('.\someotherfile', 'r')
。
在这种情况下,您的构造无法工作,因为文件是可迭代的,只能迭代一次,然后将其耗尽。
您在这里有两个选择:
代码中会发生什么?
在嵌套for
循环的开始处,两个文件都打开并且可以读取。
只要第一个内部循环运行结束,searchfile
就会结束。现在,当外循环处理第二个条目时,内循环就像一个空循环,因为它无法产生更多的条目。
答案 1 :(得分:5)
in
和with
关键字您不需要两个嵌套的for循环!
而是像这样使用更具Pythonic性的in
关键字:
with open("./search_file.txt", mode="r") as search_file:
lines_to_search = search_file.readlines()
with open("./file_to_search.txt", mode="r") as file_to_search:
for line_number, line in enumerate(file_to_search, start=1):
if line in lines_to_search:
print(f"Match at line {line_number}: {line}")
专业提示:使用with
语句打开文件以自动将其关闭。
答案 2 :(得分:4)
每次searchfile
迭代时,都需要将infile
当前位置设置为开头。您可以为此使用seek
函数。
searchfile = open('.\sometext.txt', 'r')
infile = open('.\somefile', 'r')
for line1 in infile:
searchfile.seek(0,0)
for line2 in searchfile:
print line2
searchfile.close()
infile.close()
答案 3 :(得分:-1)
我们需要更多有关此代码中对象的详细信息。但是您可能想这样做:
infile = open('.\somefile', 'r')
for line1 in infile:
for line2 in line1:
print line2
searchfile.close()
infile.close()
如果infile是列表列表-在这种情况下,嵌套for循环就有意义。