python如何读取百万级的csv文件-Python-读取巨大的.csv文件

小编典典

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

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

import csv

def 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 csv

from itertools import dropwhile, takewhile

def 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

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

2020-02-21

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值