【发布时间】:2012-06-19 21:13:17
【问题描述】:
使用 Python 的 csv 模块,是否可以将整个大型 csv 文件读取到惰性列表中?
我问这个,因为在 Clojure 中有 csv 解析模块,它们将解析一个大文件并返回一个惰性序列(序列序列)。我只是想知道这在 Python 中是否可行。
【问题讨论】:
标签: python csv clojure lazy-evaluation
使用 Python 的 csv 模块,是否可以将整个大型 csv 文件读取到惰性列表中?
我问这个,因为在 Clojure 中有 csv 解析模块,它们将解析一个大文件并返回一个惰性序列(序列序列)。我只是想知道这在 Python 中是否可行。
【问题讨论】:
标签: python csv clojure lazy-evaluation
除非我误解了你,否则这是默认行为,这是读取 csv 文件的本质:
import csv
def lazy(csvfile):
with open(csvfile) as f:
r = csv.reader(f)
for row in r:
yield row
一次返回一排。
【讨论】:
csv 模块的reader 默认是惰性的。
它将一次从文件中读取一行,将其解析为一个列表,然后返回该列表。
【讨论】:
Python 的阅读器或 DictReader 是生成器。只有在调用对象的 next() 方法时才会产生一行。
【讨论】:
csv 模块确实会延迟加载数据,一次一行。
【讨论】: