如文档中所述,
为了使
for循环成为遍历文件行的最有效方法(一种非常常见的 *** 作),该next()方法使用了隐藏的预读缓冲区。
您可以查看调用底层迭代器方法(via
)的
csv模块的实现(784行)。
csv.reader``next()``PyIter_Next
因此,如果您真的想无缓冲地读取CSV文件,则需要将文件对象(此处为
sys.stdin)转换为
next()实际调用其方法的迭代器
readline()。使用
iter函数的两个参数形式可以轻松完成此 *** 作。因此,将代码更改为
test_reader.py如下所示:
for row in csv.reader(iter(sys.stdin.readline, '')): print("Read: ({}) {!r}".format(time.time(), row))
例如,
$ python test_writer.py | python test_reader.pyRead: (1388776652.964925) ['R0', '$']Read: (1388776653.466134) ['R1', '$$']Read: (1388776653.967327) ['R2', '$$$']Read: (1388776654.468532) ['R3', '$$$$'][etc]
您能解释一下为什么需要无缓冲读取CSV文件吗?无论您要做什么,都可能有更好的解决方案。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)