前端之家收集整理的这篇文章主要介绍了
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,”)来获取一个迭代器,它从文件读取行而不读取块,但代价是性能.