您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何从流中读取CSV文件并在写入每一行时对其进行处理?

如何从流中读取CSV文件并在写入每一行时对其进行处理?

文档中所述

为了使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.py
Read: (1388776652.964925) ['R0', '$']
Read: (1388776653.466134) ['R1', '$$']
Read: (1388776653.967327) ['R2', '$$$']
Read: (1388776654.468532) ['R3', '$$$$']
[etc]

您能解释一下为什么需要无缓冲读取CSV文件吗?无论您要做什么,都可能有更好的解决方案。

其他 2022/1/1 18:48:19 有477人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶