В настоящее время я пытаюсь читать данные из файлов .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 ГГц (не уверен, какая информация вам нужна).