1

我正在尝试链接生成器,以便可以将大型 CSV 文件作为行流处理,而不是批量执行每个单个操作。

这样,我可以延迟每一步的每次迭代,避免将整个数据集加载到内存中。

生成器表达式工作正常,除非我尝试使用 if 语句过滤输出。

这有效:一次只消耗一个迭代

file_iterable = open("myfile.csv")
parsed_csv_iterable = (parse_i(i) for i in file_iterable)

next()然后我可以通过调用生成的可迭代对象一次得到一行。但是,如果我这样做

file_iterable = open("myfile.csv")
parsed_csv_iterable = (parse_i(i) for i in file_iterable if parse_i(i)[0] in [1,2,3])

然后,迭代器继续运行直到耗尽。为什么?解决方法是什么?

4

0 回答 0