Есть программа, которая принимает список xlsx файлов и прогоняет их построчно по очереди, достает нужные сведения и сопоставляет их между собой (ищет совпадения в файлах и так далее..)
Выглядит примерно так:
key_info = {}
for file in tuple_of_files:
wb = openpyxl.load_workbook(file, read_only=True)
first_sheet = wb.sheetnames[0]
for row in wb[first_sheet].rows:
#тут фрагмент кода чтобы достать из строки нужный объект, который мы сохраняем в переменную var_info
if var_info not in key_info:
key_info[var_info] = {'count' : 1, 'reg' : None, 'oper' : None, 'time_use' : set(), 'imeis' : set()}
#далее фрагмент кода по вычислению и заполнению подсловаря для этого объекта
if var_info in key_info:
key_info[var_info]['count'] += 1
key_info[var_info]['time_use'].add(some_info)
key_info[var_info]['imeis'].add(some_other_info)
Потом используя словарь с ключевыми значениями
key_info
создаю xlsx файл и записываю в него результаты анализа.
Программа работает, пока общее число строк в передаваемых ей файлах не превышает примерно 1млн, и в целом делает свою работу. Но когда пытаешься передать файлы с большим объемом (общее число строк около 5млн), то возникает ошибка memoryError.
Я понимаю, что это из-за того, что словарь
key_info
просто уже не может вмещать информацию, однако разбить его на несколько других файлов или обнулять через определенное число строк, никак не получится - теряется весь функционал проверки..
Как можно избежать этой ошибки? Зависит ли она от мощности используемого ПК?