【发布时间】:2021-05-29 08:49:03
【问题描述】:
我目前正在尝试从 Python 2.7 中的 .csv 文件中读取数据,该文件最多有 100 万行和 200 列(文件范围从 100mb 到 1.6gb)。我可以对 300,000 行以下的文件执行此操作(非常缓慢),但是一旦超过此值,我就会出现内存错误。我的代码如下所示:
def getdata(filename, criteria):
data=[]
for criterion in criteria:
data.append(getstuff(filename, criteron))
return data
def getstuff(filename, criterion):
import csv
data=[]
with open(filename, "rb") as csvfile:
datareader=csv.reader(csvfile)
for row in datareader:
if row[3]=="column header":
data.append(row)
elif len(data)<2 and row[3]!=criterion:
pass
elif row[3]==criterion:
data.append(row)
else:
return data
getstuff 函数中的 else 子句的原因是所有符合条件的元素都会一起列在 csv 文件中,所以当我通过它们时我会离开循环以节省时间。
我的问题是:
我怎样才能让它与更大的文件一起使用?
有什么方法可以让它更快?
我的电脑有 8GB RAM,运行 64 位 Windows 7,处理器为 3.40 GHz(不确定您需要什么信息)。
【问题讨论】:
-
我知道有几个看似相似的问题,但似乎没有一个对我的问题有足够的具体帮助。抱歉,如果我错过了一个。
-
您应该将读取的数据存储在数据库中(例如 Sqlite),而不是将其保存在内存中。然后,您可以运行进一步的处理,例如在 db 上进行过滤
标签: python python-2.7 file csv