我正在使用以下生成器以内存有效的方式逐行遍历给定的csv文件:
def csvreader(file):
with open(file, 'rb') as csvfile:
reader = csv.reader(csvfile, delimiter=',',quotechar='"')
for row in reader:
yield row`
这完美无缺,我能够非常好地处理非常大的文件。对于RAM有限的小型虚拟机实例来说,几千兆字节的CSV文件似乎没有问题。
但是,当文件变得太大时,磁盘空间就成了问题。 CSV文件通常似乎获得非常高的压缩率,这使我能够以非压缩大小的一小部分存储文件,但在我可以使用上面的代码来处理文件之前,我必须解压缩/膨胀文件然后运行通过我的剧本。
我的问题:是否有任何方法可以构建一个高效的生成器来执行上述操作(给定一个文件,将CSV行作为数组生成),但是通过将部分文件膨胀,直到达到换行符为止,以及然后通过csv阅读器运行,而不必整体文件放气/解压缩?
非常感谢您的考虑!
答案 0 :(得分:1)
尝试使用gzip
只需将with open(file, 'rb') as csvfile:
替换为with gzip.open(file, 'rb') as csvfile:
,然后在脚本顶部添加import gzip
。
答案 1 :(得分:1)
如果您from gzip import open
,则根本不需要更改代码!