首页  >  文章  >  后端开发  >  如何在 Python 2.7 中有效处理大型 CSV 文件?

如何在 Python 2.7 中有效处理大型 CSV 文件?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-08 03:32:02544浏览

How to Effectively Handle Large CSV Files in Python 2.7?

在 Python 中读取大型 .csv 文件

问题:在 Python 中读取大量 .csv 文件(最多 100 万行,200 列) 2.7 遇到内存错误。

最初的方法是迭代整个文件并将数据作为列表存储在内存中。然而,这种方法对于大文件来说是不切实际的,因为它会消耗过多的内存。

解决方案:

1.在生成行时对其进行处理:

避免将整个文件加载到内存中。相反,处理使用生成器函数生成的行。

def getstuff(filename, criterion):
    with open(filename, "rb") as csvfile:
        datareader = csv.reader(csvfile)
        yield next(datareader)  # yield the header row
        for row in datareader:
            if row[3] == criterion:
                yield row

2.使用生成器函数进行过滤:

使用生成器函数迭代文件时过滤数据。此方法允许匹配满足特定条件的多个连续行。

def getstuff(filename, criterion):
    with open(filename, "rb") as csvfile:
        datareader = csv.reader(csvfile)
        yield next(datareader)  # yield the header row
        yield from takewhile(
            lambda r: r[3] == criterion,
            dropwhile(lambda r: r[3] != criterion, datareader))
        return

3.优化内存消耗:

重构 getdata() 以使用生成器函数,确保任何时候内存中只保留一行。

def getdata(filename, criteria):
    for criterion in criteria:
        for row in getstuff(filename, criterion):
            yield row

其他速度提示:

  • 使用带有块大小参数的 csv.reader: 以较小的块读取文件以减少内存占用。
  • 考虑使用数据库引擎:如果数据合适,将其存储在数据库中,以便更快、更高效的处理。

以上是如何在 Python 2.7 中有效处理大型 CSV 文件?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn