目前,这段代码使我从头到尾都掌握了所有内容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()
Run Code Online (Sandbox Code Playgroud)
我试图用来searchfile.readlines()创建一个列表,以打印所有infile行的所有searchfile行,但仍然无法正常工作。有人有线索吗?
我想searchfile是您先前打开的文件,例如searchfile = open('.\someotherfile', 'r')。
在这种情况下,您的构造将无法工作,因为文件是可迭代的,只能迭代一次,然后耗尽。
您在这里有两个选择:
您的代码会怎样?
在嵌套for循环的开始,两个文件都打开并且可以读取。
每当第一个内部循环结束时,searchfile它就会结束。现在,当外循环处理第二个条目时,内循环就像一个空循环,因为它无法产生更多的条目。
in和with关键字您不需要两个嵌套的for循环!而是in像这样使用more pythonic 关键字:
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}")
Run Code Online (Sandbox Code Playgroud)
专家提示:使用with语句打开文件以自动将其关闭。
您需要将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()
Run Code Online (Sandbox Code Playgroud)