現在、最大100万行、200列のPython 2.7の.csvファイルからデータを読み取ろうとしています(ファイルの範囲は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ファイルにまとめてリストされるため、時間を節約するためにそれらを通過したときにループを終了するためです。
私の質問は:
これを大きなファイルで動作させるにはどうすればよいですか?
速くする方法はありますか?
私のコンピューターには8 GBのRAMがあり、64ビットのWindows 7を実行しています。プロセッサーは3.40 GHzです(必要な情報は不明)。