Python 为什么';for循环是否在这里执行?

Python 为什么';for循环是否在这里执行?,python,for-loop,text,Python,For Loop,Text,我希望这段代码创建行列表2列表,然后运行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 是的,open就是这样工作的。它向文件对象返回一个迭代器。您只能在它上迭代一次,直到用尽为止 列表中的第一次迭代将

我希望这段代码创建
行列表2列表,然后运行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

是的,
open
就是这样工作的。它向文件对象返回一个迭代器。您只能在它上迭代一次,直到用尽为止

列表中的第一次迭代将耗尽文件迭代器,因此当您再次检查它时,已经没有任何东西可以重复了

这样做的好处是不会将整个文件(有时可能很大)同时加载到内存中,从而使程序无法在内存中运行。但是,您可以(如果需要)通过调用file对象的
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)
将文件搜索到其开始位置。

是的,这就是
open
的工作方式。它向文件对象返回一个迭代器。您只能在它上迭代一次,直到用尽为止

列表中的第一次迭代将耗尽文件迭代器,因此当您再次检查它时,已经没有任何东西可以重复了

这样做的好处是不会将整个文件(有时可能很大)同时加载到内存中,从而使程序无法在内存中运行。但是,您可以(如果需要)通过调用file对象的
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)
,将文件搜索到其开始位置。

您到底想对文件..做什么?没什么,我只是不明白为什么这不能像我预期的那样工作。您到底想对文件..做什么?没什么,我只是不明白为什么它没有像我预期的那样工作。如果对您的情况更合适,您也可以通过调用
file2.seek(0)
重置迭代器。@Collin是的,这是另一个不错的选择。我怎么会错过这个。或者OP实际上是指行列表中x的
?您也可以通过调用
file2.seek(0)
重置迭代器,如果这样更适合您的情况。@Collin是的,这是另一个不错的选择。我怎么会错过这个呢?或者OP实际上是指行列表中x的