Запись в json файл, MemoryError

Рейтинг: 2Ответов: 1Опубликовано: 03.08.2023

Имеется объект dict со структурой

data = {
"items": [
    {
     "name_1": "val",
     "name_2": "val",
     "images": ["километровая_строка_base64", "километровая_строка_base64", ...]
     },
    {...}, ...
         ]
       }

Суммарный вес составляет что то около 350 мб, строки "val" содержат кириллические символы. При попытке записи в файл

    with open(path_to_jsonfile, 'w', encoding='utf-8') as f:
        f.write(json.dumps(data, ensure_ascii=False))

json.dumps давится и срыгивает исключением MemoryError. Я понимаю, что хранить картинки в json и тем самым раздувать размер не самое хорошее решение, но его (решение) принимал не я. Вопрос, как в данном случае записать данные в файл json учитывая наличие кириллицы? Может есть способы разбить на чанки и записывать порционно?

Ответы

▲ 2

Если хотите писать файл по частям, то есть функция, работающая с файловым потоком (не создающая с дампом в виде одной строкой целиком):

with open("D:\\tests\\tmp\\huge.jsom", 'w', encoding='utf-8') as f:
    #f.write(json.dumps(data, ensure_ascii=False))
    json.dump(data, f, ensure_ascii=False)