逐行读取压缩/放气(csv)文件

时间:2015-04-23 08:30:19

标签: python python-2.7 gzip

我正在使用以下生成器以内存有效的方式逐行遍历给定的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阅读器运行,而不必整体文件放气/解压缩?

非常感谢您的考虑!

2 个答案:

答案 0 :(得分:1)

尝试使用gzip

只需将with open(file, 'rb') as csvfile:替换为with gzip.open(file, 'rb') as csvfile:,然后在脚本顶部添加import gzip

请参阅this SO question for more

答案 1 :(得分:1)

如果您from gzip import open,则根本不需要更改代码!