为什么我第二次在Python中运行“readlines”时,在同一个文件中什么都没有返回?

2024-05-19 18:18:53 发布

您现在位置:Python中文网/ 问答频道 /正文

>>> 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的解释器中试过这个。为什么会这样?


Tags: txtmodeversionopen解释器tmpatfile
3条回答

你需要找到文件的开头。使用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']
>>>

Python会跟踪您在文件中的位置。当你到达终点时,它不会自动翻转过来。尝试f.seek(0)

了解其他一些海报没有明确声明的重要部分是,文件是用一个光标读取的,该光标标记文件中的当前位置。因此,在第一次readlines()调用中,光标位于文件的开头,并一直进行到文件的结尾,因为返回了所有文件数据。在第二个readlines调用中,光标位于文件末尾,因此当它读取到文件末尾时,它根本不会移动,也不会返回任何数据。出于教育目的,您可以快速编写一些代码,打开一个文件,读取几个字节或行,然后调用read lines(),您将看到readlines()调用的输出从上次读取时停止的地方开始,一直持续到文件结束。

other提到的seek(0)调用将允许您重置文件开头的光标,以重新开始读取。

相关问题 更多 >