У меня есть 1000 + JSON-файлы, которые выглядят какИтеративно разбора JSON файл
{
"name": "Some name",
"part_num": "123456",
"other_config": {
// Large amount of objects
},
"some more": {
// Large amount of objects
}
// etc
}
Когда моя программа запускается, он должен сканировать директорию со всеми этими JSON файлов, загружать каждый из них, и извлечь "name"
и "part_num"
и заполняет список с этими значениями. Затем пользователь выбирает один, и этот конфиг затем повторно обрабатывается и предпринимаются соответствующие действия.
Проблема заключается в том, что многие файлы занимают некоторое время. Я немного смягчил его, используя multiprocessing
, чтобы бросить работу по всем доступным ядрам в фоновом режиме, а затем заполнить список, как только это сделано, но я все еще ограничен IO. Поскольку я знаю, что этот код будет работать на компьютерах с более медленными процессорами и жесткими дисками, чем у меня, эта скорость неприемлема.
В среднем случае сценарий состоит в том, что значения, которые мне нужны, находятся в начале файла, но я не могу предположить, что это в худшем случае. Есть ли способ итеративного разбора файла JSON, чтобы я мог быстрее загружать то, что мне нужно из этих файлов?
Я мог бы прибегнуть к регулярному выражению, but I'd really prefer not to.
Или вы можете объединить их в структуру SINGLE jsons, например. массив данных, '[{материал из файла1}, {материал из файла2}, ....]', поэтому вы загружаете только файл SINGLE и анализируете структуру SINGLE js .... или просто используете базу данных –
Не использовать файлы JSON? Почему бы не использовать базу данных 'sqlite' для этих данных, например? Сканирование файлов просто * один раз *, если вам нужно. –
Я предлагаю искать решение, отличное от разбора всех этих файлов при каждом запуске программы. Возможно, кэширование результатов в базе данных, а затем только открытие файлов, которые были добавлены или изменены с момента последнего запуска? –