我注意到一些奇怪的行为与今天玩弄next()和readline().似乎两个函数都产生相同的结果(这是我所期望的).但是,当我混合它们时,我会得到一个ValueError.这是我做的:
>>> f = open("text.txt", 'r')
>>> f.readline()
'line 0\n'
>>> f.readline()
'line 1\n'
>>> f.readline()
'line 2\n'
>>> f.next()
'line 3\n'
>>> f.next()
'line 4\n'
>>> f.readline()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: Mixing iteration and read methods would lose data
>>>
>>> f = open("text.txt", 'r')
>>> f.next()
'line 0\n'
>>> f.next()
'line 1\n'
>>> f.next()
'line 2\n'
>>> f.readline()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: Mixing iteration and read methods would lose data
Run Code Online (Sandbox Code Playgroud)
那么这里的整体问题是导致此错误的引擎盖下发生了什么?
有些问题可能会得到解答但我希望听到答案,如果不是:
next()和之间有什么区别readline()?for f in file:哪个功能时,我打电话(并且这是否重要)?next()后readline(),而不是周围的其他方式?提前致谢,
我不认为这很重要,但是如果这是版本依赖的,我使用的是Python 2.7.6 for Windows
hiv*_*ert 19
根据Python的文档(重点是我的)
文件对象是它自己的迭代器,例如iter(f)返回f(除非f被关闭).当文件用作迭代器时,通常在for循环中(例如,对于f:print line.strip()中的行),将重复调用next()方法.此方法返回下一个输入行,或者在文件打开以供读取时触发EOF时引发StopIteration(当文件打开以进行写入时,行为未定义).为了使for循环成为循环文件行的最有效方式(一种非常常见的操作),next()方法使用隐藏的预读缓冲区.由于使用预读缓冲区,将next()与其他文件方法(如readline())结合使用是行不通的.但是,使用seek()将文件重新定位到绝对位置将刷新预读缓冲区.
该next方法从效率原因中读取了所需的更多内容.这打破了readline.所以答案是
next 由于预读而更快for s in f: 使用 nextnext,readline对文件使用标准的慢速读取,这样就没有问题了.|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           6367 次  |  
        
|   最近记录:  |