为什么for循环不执行?

时间:2017-07-10 14:06:21

标签: python for-loop text

我希望这段代码能够创建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

1 个答案:

答案 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)来查找文件到其起始位置。