На даний момент я намагаюся читати дані з .csv файлів у Python 2.7 із розміром до 1 мільйона рядків та 200 стовпців (файли коливаються від 100 Мб до 1,6 Гбіт). Я можу це зробити (дуже повільно) для файлів з меншою кількістю 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, тому я залишаю цикл, коли проходжу їх, щоб заощадити час.
Мої запитання:
Як мені вдається змусити це працювати з більшими файлами?
Чи є якийсь спосіб я зробити це швидше?
На моєму комп’ютері є 8 Гб оперативної пам’яті, працює 64-бітова Windows 7, а процесор - 3,40 ГГц (не точно, яка інформація вам потрібна).