加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-16 22:13:02 所属栏目:Python 来源:网络整理
导读:我一直认为在Python中迭代文件就等于在循环中调用它的readline方法,但是今天我发现了一种情况并非如此.具体来说,我有一个Popend进程p list(itertools.takewhile(lambda x: x != "n",p.stdout)) 挂起(大概是因为p等待输入; stdin和stdout都是我的Python进程

我一直认为在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,”)来获取一个迭代器,它从文件读取行而不读取块,但代价是性能.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读