【发布时间】:2010-08-19 17:35:23
【问题描述】:
>>> 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 的解释器中尝试过这个。为什么会这样?
【问题讨论】:
标签: 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 的解释器中尝试过这个。为什么会这样?
【问题讨论】:
标签: python
您需要寻找到文件的开头。使用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 调用中,光标位于文件末尾,因此当它读取到文件末尾时,它根本不移动,也不返回任何数据。出于教育目的,您可以快速编写一些代码来打开文件,读取几个字节或行,然后调用 readlines(),您将看到 readlines() 调用的输出从您离开的地方开始与您之前的读取,并继续到文件末尾。
other 提到的 seek(0) 调用将允许您重置文件开头的光标以重新开始读取。
【讨论】:
除了寻找文件的开头之外,您还可以将值存储为以后可以在内存中需要它们时重复使用的东西。像这样的:
with open('tmp/version.txt', 'r') as f:
lines = f.readlines()
我相信 with 语句是 2.6 中的新语句,在以前的版本中,您需要从 future 导入它。
【讨论】: