python – 迭代类文件和调用readline之间的区别

前端之家收集整理的这篇文章主要介绍了python – 迭代类文件和调用readline之间的区别前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我一直认为在Python中迭代文件就等于在循环中调用它的readline方法,但是今天我发现了一种情况并非如此.具体来说,我有一个Popen’d进程p

list(itertools.takewhile(lambda x: x != "\n",p.stdout))

挂起(大概是因为p等待输入; stdin和stdout都是我的Python进程的管道),而以下工作:

list(itertools.takewhile(lambda x: x != "\n",iter(p.stdout.readline,"")))

有人可以解释这个区别吗?

最佳答案
差异完全在于迭代与readline方法的实现.文件迭代以块(默认为8千字节)读取,然后在使用时将缓冲区拆分为行.另一方面,readline方法注意不要读取多行,这意味着逐个字符地读取.读取块更有效,但这意味着您不能在读取之间混合文件上的其他操作.期望的是,当您迭代文件时,您的意图是按顺序读取所有行,并且您不会对其执行其他操作. readline方法无法做出这种假设.

正如Sven Marnach在对你的问题的评论中暗示的那样,你可以使用iter(f.readline,”)来获取一个迭代器,它从文件读取行而不读取块,但代价是性能.

原文链接:https://www.f2er.com/python/439273.html

猜你在找的Python相关文章