Я пишу простую программу, которая должна читать большой файл (263.5gb, если быть точным) с JSON на каждой строке (link here). Я провел некоторое исследование, и лучшим методом, который я нашел, является чтение каждой строки за строкой. Шахта выглядит следующим образом (full code here):Чтение больших текстовых файлов по-прежнему использует всю мою память
with open(dumpLocation, "r") as f:
for line in f:
# Read line, convert to dictionary and assign it to 'c'
c = json.loads(f.readline())
for n in files:
if n.lower() in c["title"].lower():
try:
# Collect data
timestamp = str(c["retrieved_on"])
sr_id = c["subreddit_id"]
score = str(c["score"])
ups = str(c["ups"])
downs = str(c["downs"])
title = ('"' + c["title"] + '"')
# Append data to file
files[n].write(timestamp + ","
+ sr_id + ","
+ score + ","
+ ups + ","
+ downs + ","
+ title + ","
+ "\n")
found += 1
except:
numberOfErrors += 1
errors[comments] = sys.exc_info()[0]
comments += 1
# Updates user
print("Comments scanned: " + str(comments) + "\nFound: " + str(found) + "\n")
Теперь я могу получить это бежать, и он побежал за хороший час, прежде чем он упал (примерно 1,3 миллиона строк). Я заметил в процессах, что использование памяти медленно растет и доходит до 2 гб перед сбоем.
Существует около 200 миллионов строк, которые мне нужно отсортировать, и я также пишу файлы, если найдены конкретные слова (в поисках 5, найдено 337 перед сбоем). Есть ли лучший способ сделать это? Мой компьютер обычно имеет только 2 Гб оперативной памяти, чтобы сэкономить
Почему вы называете 'f.readline()' когда у вас уже есть строка в переменной 'line'? –
Я полностью пропустил это, спасибо! Случайно оставил его там, когда я менял его. –