【问题标题】:Can csv data be made lazy?可以使csv数据变得懒惰吗?
【发布时间】:2012-06-19 21:13:17
【问题描述】:

使用 Python 的 csv 模块,是否可以将整个大型 csv 文件读取到惰性列表中?

我问这个,因为在 Clojure 中有 csv 解析模块,它们将解析一个大文件并返回一个惰性序列(序列序列)。我只是想知道这在 Python 中是否可行。

【问题讨论】:

    标签: python csv clojure lazy-evaluation


    【解决方案1】:

    除非我误解了你,否则这是默认行为,这是读取 csv 文件的本质:

    import csv
    
    def lazy(csvfile):
        with open(csvfile) as f:
            r = csv.reader(f)
            for row in r:
                yield row
    

    一次返回一排。

    【讨论】:

    • @Lattyware:当然,我这样做只是为了澄清/强调懒惰。
    • @Lattyware 您将惰性放入函数中创建了一个很好的示例,因此是一个很好的答案。对不起,我没有早点说。
    【解决方案2】:

    csv 模块的reader 默认是惰性的。

    它将一次从文件中读取一行,将其解析为一个列表,然后返回该列表。

    【讨论】:

      【解决方案3】:

      Python 的阅读器或 DictReader 是生成器。只有在调用对象的 next() 方法时才会产生一行。

      【讨论】:

        【解决方案4】:

        csv 模块确实会延迟加载数据,一次一行。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-11-30
          • 1970-01-01
          • 2013-03-20
          • 1970-01-01
          • 2021-08-12
          • 2019-05-19
          • 2010-11-29
          • 1970-01-01
          相关资源
          最近更新 更多