В настоящее время я пытаюсь прочитать данные из файлов .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
Причина предложения else в функции getstuff состоит в том, что все элементы, которые соответствуют критерию, будут перечислены вместе в файле csv, поэтому я покидаю цикл, когда прохожу их, чтобы сэкономить время.
Мои вопросы:
-
Как я могу заставить это работать с большими файлами?
-
Есть ли способ сделать это быстрее?
Мой компьютер имеет 8 ГБ оперативной памяти, работает под управлением 64-разрядной Windows 7, а процессор имеет частоту 3,40 ГГц (не знаю, какая информация вам нужна).