问题:在 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
其他速度提示:
以上是如何在 Python 2.7 中有效处理大型 CSV 文件?的详细内容。更多信息请关注PHP中文网其他相关文章!