YaO*_*OzI 9 python file-io file list python-internals
从Python2教程和Python3教程中,在7.2.1节的中点都有一行说:
如果要读取列表中文件的所有行,也可以使用
list(f)
或f.readlines().
所以我的问题是:将文件对象转换为列表的这两种方法有什么区别?我在性能方面和Python对象实现中都很好奇(也许是Python2和Python3之间的区别).
Mar*_*ers 12
在功能上,没有区别; 两种方法都会产生完全相同的列表.
实现方面,一个使用文件对象作为迭代器(next(f)
重复调用直到StopIteration
被引发),另一个使用专用方法来读取整个文件.
除非你io.open()
在Python 2中使用,否则Python 2和3的含义完全不同.Python 2文件对象使用隐藏缓冲区进行文件迭代,如果你混合文件对象迭代和/ .readline()
或.readlines()
调用,它可能会让你失望.
的io
库(其处理所有的文件I/O在Python 3)不使用这样的隐藏缓冲器,所有缓冲代替由一个处理BufferedIOBase()
包装类.事实上,io.IOBase.readlines()
实现使用文件对象作为引擎盖下一个迭代无论如何,和TextIOWrapper
迭代代表们TextIOWrapper.readline()
,所以list(f)
和f.readlines()
本质上是一样的,真的.
性能方面,即使在Python 2中也没有什么区别,因为瓶颈是文件I/O; 你能多快从磁盘上读取它.在微观层面,性能可能取决于其他因素,例如操作系统是否已经缓冲了数据以及线路的长度.
归档时间: |
|
查看次数: |
1060 次 |
最近记录: |