我正在尝试链接生成器,以便我可以将大型CSV文件作为行流处理,而不是批量执行每个操作。
这样,我可以延迟每一步的每次迭代,避免在内存中加载整个数据集。
生成器表达式工作正常,除非我尝试使用if语句过滤输出。
这样做:一次只消耗一次迭代
file_iterable = open("myfile.csv")
parsed_csv_iterable = (parse_i(i) for i in file_iterable)
然后我可以通过在生成的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])
然后,迭代器继续运行直到耗尽。为什么?什么是解决方法?