我希望这段代码能够创建list_of_rows2 list
,然后运行for循环。为什么for循环没有被执行?这就是open
的工作原理吗?
infile = r"D:\temp.txt"
with open(infile) as file2:
list_of_rows2 = [x.split() for x in file2]
for x in file2:
print x
答案 0 :(得分:5)
是的,这就是open
的工作原理。它返回文件对象的迭代器。你只能迭代一次直到筋疲力尽。
列表解析中的第一次迭代耗尽了文件迭代器,所以当你再次查看它时,没有什么可以迭代的。
这样做的好处是不会将整个文件(有时可能很大)一次性加载到内存中,从而使程序在内存中窒息。但是,您可以(如果需要)通过调用文件对象的readlines
方法将文件加载到内存中:
with open(infile) as file2:
file2 = file2.readlines() # or list(file2)
list_of_rows2 = [x.split() for x in file2]
for x in file2:
print x
另一个选择是在再次迭代之前,通过调用file2.seek(0)
来查找文件到其起始位置。