首页 > 解决方案 > 枚举大型 csv 的加载似乎没有被懒惰地评估

问题描述

我的理解是 enumerate 计算是惰性的,因为它可以应用于生成器,并且 csv.reader 也是惰性的,但是,当结合在一个大的 csv 文件上时,它们会使我的内核崩溃。

此代码挂起并最终使我的内核在一个非常大的文件上崩溃:

with open(RAW_DATA) as file:
    csv_reader = csv.reader(file, delimiter=',')
    data = []
    for row_idx, row in enumerate(csv_reader):
        data.append(row)
        if (row_idx + 1) % BLOCK_SIZE == 0:
            dump_data(data)
            data = []

但是,这段代码运行良好,每个循环大约需要 2 秒:

with open(RAW_DATA) as file:
    csv_reader = csv.reader(file, delimiter=',')
    data = []
    row_idx = 0
    for row in csv_reader:
        data.append(row)
        row_idx += 1
        if row_idx % BLOCK_SIZE == 0:
            dump_data(data)
            data = []

这对我来说没有意义 - 我认为假设惰性评估,它们在功能上是等效的?

标签: pythoncsv

解决方案


推荐阅读