说我有代码:
file = open('items.txt', 'r')
print(file.read())
这很好,只打印整个文本文件,但是:
file = open('items.txt', 'r')
for line in file:
print(line)
print(file.read())
所以它会运行for循环就好并打印行,但最后一行不会做任何事情。使用第二个代码,它应该打印整个文件两次,但它只打印一次。有人能解释一下原因吗?
答案 0 :(得分:8)
完成在for循环中读取文件后,光标将设置为文件末尾。
试试这个例子:
file = open('items.txt', 'r')
for line in file:
print(line)
file.seek(0, 0)
print(file.read())
这次将打印整个文件两次,因为我们将光标设置为文件的开头。
答案 1 :(得分:2)
使用第二个代码,它应该打印整个文件两次,但它 只打印一次
它只打印一次文件,因为for循环将读取整个文件。 file
实际上引用了文件中的位置,该位置在您浏览文件时会发生变化。因此,当您遍历所有内容时,file
引用文件的末尾。如果您在迭代完文件后尝试读取所有内容(使用file.read()
),则不会收到任何内容,因为您已经在最后。
如果你这样做,你会有同样的行为
file = open('items.txt', 'r')
print(file.read())
print(file.read())
您可以使用file.seek(0, 0)
导航到文件的开头。
请参阅:https://docs.python.org/3/tutorial/inputoutput.html#methods-of-file-objects。