栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python-读取巨大的.csv文件

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python-读取巨大的.csv文件

你正在将所有行读入列表,然后处理该列表。不要那样做。

在生成行时对其进行处理。如果需要首先过滤数据,请使用生成器函数:

import csvdef getstuff(filename, criterion):    with open(filename, "rb") as csvfile:        datareader = csv.reader(csvfile)        yield next(datareader)  # yield the header row        count = 0        for row in datareader: if row[3] == criterion:     yield row     count += 1 elif count:     # done when having read a consecutive series of rows      return

我还简化了你的过滤器测试;逻辑相同,但更为简洁。

因为只匹配与条件匹配的单个行序列,所以还可以使用:

import csvfrom itertools import dropwhile, takewhiledef getstuff(filename, criterion):    with open(filename, "rb") as csvfile:        datareader = csv.reader(csvfile)        yield next(datareader)  # yield the header row        # first row, plus any subsequent rows that match, then stop        # reading altogether        # Python 2: use `for row in takewhile(...): yield row` instead        # instead of `yield from takewhile(...)`.        yield from takewhile( lambda r: r[3] == criterion, dropwhile(lambda r: r[3] != criterion, datareader))        return

你现在可以getstuff()直接循环。在getdata():

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

现在直接getdata()在你的代码中循环:

for row in getdata(somefilename, sequence_of_criteria):    # process row

现在,你仅在内存中保留一行,而不是每个条件存储数千行。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/596739.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号