Python: Как написать jsonline без перезаписи? - PullRequest
0 голосов
/ 30 января 2019

У меня есть кусок кода, он обрабатывает тысячи файлов в каталоге, для каждого файла он генерирует объект (словарь) с частью значения ключа как:

{
    ........
    'result': [...a very long list...]
}

, если яобработайте все файлы, сохраните результат в списке, затем используйте библиотеку jsonlines, чтобы записать все, на моем ноутбуке (mac) не хватит памяти.

Так что мое решение будет обрабатываться один за другим и получать результат, затемвставьте в файл jsonline и удалите объект и освободите память.

После проверки официального документа: https://jsonlines.readthedocs.io/en/latest/

Я не смог найти метод, который может писать без перезаписи файла jsonline.

Итак, как мне справиться с таким большим выводом.

Кроме того, я использую параллельные потоки для обработки результата:

from multiprocessing.dummy import Pool
Pool(4).map(get_result, file_lst)

Я надеюсь открыть json_file,запишите каждый результат, а затем освободите память.

1 Ответ

0 голосов
/ 30 января 2019

Если я правильно понимаю ваш вопрос, я думаю, что это решит его:

with jsonlines.open('yourTextFile', mode='a') as writer:
    writer.write(...)

Поскольку вы упомянули, что вы перезаписываете файл, я думаю, это потому, что вы используете mode='w' (w = запись)вместо использования mode='a' (a = добавление)

...