为什么第二次对同一文件运行"readlines"时没有返回任何内容?
>>> f = open('/tmp/version.txt', 'r')
>>> f
<open file '/tmp/version.txt', mode 'r' at 0xb788e2e0>
>>> f.readlines()
['2.3.4\n']
>>> f.readlines()
[]
>>>
我在Python的解释器里试过这个。为什么会这样呢?
4 个回答
6
要理解的一个重要点是,有些人没有明确说明,文件是通过一个光标来读取的,这个光标标记了当前在文件中的位置。第一次调用readlines()时,光标在文件的开头,读取文件中的所有内容后,光标就移动到了文件的末尾。第二次调用readlines()时,光标已经在文件的末尾了,所以当它尝试读取时,光标不再移动,自然也就没有数据返回了。为了更好地理解,你可以写一段简单的代码,打开一个文件,读取几行内容,然后再调用readlines(),你会发现readlines()的输出从你上次读取的位置开始,直到文件的末尾。
其他人提到的seek(0)可以让你把光标重置到文件的开头,这样你就可以重新开始读取了。
6
Python会记住你在文件中的位置。当你到达文件的末尾时,它不会自动回到开头。你可以试试 f.seek(0)
这个命令。
20
你需要把文件指针移到文件的开头。可以使用 f.seek(0)
来返回到开头:
>>> f = open('/tmp/version.txt', 'r')
>>> f
<open file '/tmp/version.txt', mode 'r' at 0xb788e2e0>
>>> f.readlines()
['2.3.4\n']
>>> f.seek(0)
>>> f.readlines()
['2.3.4\n']
>>>