我是靠谱客的博主 爱笑航空,最近开发中收集的这篇文章主要介绍python for line in open,python – 避免缓冲读取“for line in …”,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我正在从一个命名管道逐行阅读,该管道以逐秒的节奏提供线条.我试着简单明了

for line in file:

processLine(line)

但是从不调用processLine(). (编辑:在读取了很多行之后最终会调用它,这需要几分钟.)使用strace进行调查显示,该进程确实每秒执行一次read()系统调用,并且正如预期的那样每个都接收一个完整的行时间.

我可以猜测成语中的for行缓冲输入,并且稍后会在每个输入行调用processLine(),可能是在缓冲区已满或者输入终止时(在我的情况下它永远不会).

我可以将此处使用的缓冲区明确设置为更小的值吗?

还是有另一种方法来调整这个东西,以便每一行也以一秒一秒的节奏处理?

编辑:

目前我正在使用此解决方法:

for line in lineByLine(namedPipe):

这是lineByLine():

def lineByLine(openFile):

line = ''

while True:

char = os.read(openFile.fileno(), 1)

if not char:

if line:

yield line

break

line += char

if line.endswith('n'):

yield line

line = ''

但这个丑陋的解决方案当然没有解决方案.

解决方法:

正如您在问题中提到的那样,file.next()内部缓冲区.通常这种行为是正确的,不可检测.

file.readline()没有以相同的方式在内部缓冲.你笨拙的示例程序创建了一个生成器,允许file.readline()用作for循环中的iterable.

创建这样的可迭代的更简单方法是使用iter的双参数形式:

import sys

for line in iter(namedPipe.readline, ''):

print line

标签:python,file,for-loop,buffer

来源: https://codeday.me/bug/20190703/1363834.html

最后

以上就是爱笑航空为你收集整理的python for line in open,python – 避免缓冲读取“for line in …”的全部内容,希望文章能够帮你解决python for line in open,python – 避免缓冲读取“for line in …”所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(31)

评论列表共有 0 条评论

立即
投稿
返回
顶部