ฉันกำลังพยายามอ่านข้อมูลจากไฟล์. csv ใน Python 2.7 ที่มีมากถึง 1 ล้านแถวและ 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 คือองค์ประกอบทั้งหมดที่เหมาะสมกับเกณฑ์จะแสดงรายการร่วมกันในไฟล์ csv ดังนั้นฉันจึงออกจากลูปเมื่อฉันผ่านไปเพื่อประหยัดเวลา
คำถามของฉันคือ:
ฉันจะจัดการเพื่อให้สิ่งนี้ทำงานกับไฟล์ที่ใหญ่กว่าได้อย่างไร
มีวิธีใดบ้างที่ฉันสามารถทำให้เร็วขึ้นได้?
คอมพิวเตอร์ของฉันมี RAM 8GB ใช้ Windows 7 64 บิตและโปรเซสเซอร์คือ 3.40 GHz (ไม่แน่ใจว่าคุณต้องการข้อมูลอะไร)