現在、最大 100 万行、200 列 (ファイルの範囲は 100mb から 1.6gb) の Python 2.7 の .csv ファイルからデータを読み込もうとしています。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 です (必要な情報が不明です)。