为什么第二次在同一个文件中运行Python中的"readlines"没有返回任何内容?

Som*_*DOS 5 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()
[]
>>>
Run Code Online (Sandbox Code Playgroud)

我在Python的解释器中试过这个.为什么会这样?

sbe*_*rry 16

您需要寻找文件的开头.使用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']
>>>
Run Code Online (Sandbox Code Playgroud)


Ale*_*sky 6

Python会跟踪您在文件中的位置.当你结束时,它不会自动回滚.试试f.seek(0).


Mat*_*nes 5

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

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