Я пытаюсь проанализировать гигантский файл журнала (около 5 ГБ).
Я хочу проанализировать только первые 500 000 строк и не хочу читать весь файл в память.
По сути, я хочу сделать то, что делает код ниже, но с циклом while
вместо цикла for
и условным условием if
. Я также хочу быть уверенным, что не прочитал весь файл в память.
import re
from collections import defaultdict
FILE = open('logs.txt', 'r')
count_words=defaultdict(int)
import pickle
i=0
for line in FILE.readlines():
if i < 500000:
m = re.search('key=([^&]*)', line)
count_words[m.group(1)]+=1
i+=1
csv=[]
for k, v in count_words.iteritems():
csv.append(k+","+str(v))
print "\n".join(csv)