我有一段代码,它处理目录中的数千个文件,对于每个文件,它会生成一个对象(字典),其键值的一部分为:
{
........
'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,写入每个结果,然后释放内存。
答案 0 :(得分:1)
如果我正确理解了您的问题,我认为这可以解决:
with jsonlines.open('yourTextFile', mode='a') as writer:
writer.write(...)
正如您提到的,您要覆盖文件,我认为这是因为您使用mode='w'
(w =正在写入)而不是使用mode='a'
(a =添加)