以下代码是为每个循环读取一行,还是在开始迭代之前先将整个文件读入内存?
for line in f:
print(line)
我的目的是从文件中读取一行。
你无法确定。你所能知道的就是它会return一次一行。这Python 标准库文档 says :
为了使 for 循环成为循环文件行的最有效方式(一种非常常见的操作),next() 方法使用隐藏的预读缓冲区。由于使用预读缓冲区,将 next() 与其他文件方法(如 readline())结合起来无法正常工作.
我的理解是,预读缓冲区加载一个完整的块(未确定的大小)并在该缓冲区中查找行尾。但对于一个小文件(几个ko),您可以确定只会有一次物理读取。我曾经尝试过放一个read
得到第一行后next
在一个小文件(大约 50 行)上,在文件末尾找到文件指针。
当然,对于一个非常大的文件,它将被读取身体上的一次一个块,Python 内存一次会使用一行。所以它会比readlines()
。但毕竟在common系统(类 Unix、Mac OS 或 Windows)上的底层读取系统调用file(*) 没有行尾的概念,只能读取(最大)字节数。所以这些系统没有办法身体上的读到行尾,无论你使用什么语言。您只能使用加载内部缓冲区然后在该缓冲区中查找行尾的实用程序。就是这样next()
方法适用于 Python 中的文件对象。
在您发表评论后,我了解到您尝试只获取第一行。你可以这样做:
line = f.next()
但不要尝试使用任何read
之后的方法,因为正如我上面所解释的,文件指针可能远远超出第一行的末尾。
(*) 从控制台或终端设备读取时会不一样......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)