我处理一个文件:跳过标题(注释),处理第一行,处理其他行。
f = open(filename, 'r')
# skip the header
next(f)
# handle the first line
line = next(f)
process_first_line(line)
# handle other lines
for line in f:
process_line(line)
如果line = next(f)
被line = f.readline()
替换,则会遇到错误。
ValueError:混合迭代和读取方法会丢失数据
因此,我想知道Python中next(f)
,f.readline()
和f.next()
之间的差异?
答案 0 :(得分:3)
引用official Python documentation,
file
对象是它自己的迭代器,例如iter(f)
返回f
(除非f关闭)。当文件用作迭代器时,通常在for
循环中(例如,for line in f: print line.strip()
),重复调用next()
方法。此方法返回下一个输入行,或者当文件打开以供读取时触发EOF时引发StopIteration
(当文件打开以进行写入时,行为未定义)。 为了使for循环成为循环文件行的最有效方式(一种非常常见的操作),next()
方法使用隐藏的预读缓冲区。使用预读缓冲区的结果是,将next()
与其他文件方法(如readline()
)组合使用是行不通的。
基本上,当在Python的文件对象上调用next
函数时,它从文件中获取一定数量的字节并处理它们并仅返回当前行(当前行的结尾由换行符确定)字符)。因此,文件指针被移动。它不会处于当前返回行结束的相同位置。因此,在其上调用readline
会产生不一致的结果。这就是为什么不允许混合它们的原因。