python中的文件对象是可迭代的

She*_*jie 13 python iterable

我有一个文件"test.txt":

this is 1st line
this is 2nd line
this is 3rd line
Run Code Online (Sandbox Code Playgroud)

以下代码

lines = open("test.txt", 'r')
for line in lines:
    print "loop 1:"+line
for line in lines:
    print "loop 2:"+line
Run Code Online (Sandbox Code Playgroud)

只打印:

loop 1:this is 1st line

loop 1:this is 2nd line

loop 1:this is 3rd line
Run Code Online (Sandbox Code Playgroud)

它根本不打印loop2.

两个问题:

  1. open()返回的文件对象是可迭代的吗?这就是为什么它可以用于for循环?

  2. 为什么loop2根本没有印刷?

jam*_*lak 37

它不仅是一个可迭代的,它是一个迭代器,这就是为什么它只能遍历文件一次.您可以使用.seek(0)尽可能多的建议重置文件光标,但在大多数情况下,您应该只迭代一次文件.

  • +1是对可迭代与迭代器事物的简洁描述(大多数其他答案甚至没有尝试过,即使它是问题的关键). (3认同)

Mar*_*ers 5

是的,文件对象是迭代器。

与所有迭代器一样,您只能循环一次,之后迭代器将耗尽。您的文件读取指针位于文件末尾。重新打开文件,或者.seek(0)在需要再次循环时使用倒带文件指针。

或者,尽量避免在一个文件上循环两次;在第一个循环中将您需要的内容提取到另一个数据结构(列表、字典、集合、堆等)中。