使用python保存换行分隔的json(也称为linejson、jsonlines、.jsonl文件)的模式
使用Python,我将json文档保存到单独的行中,如下所示:使用python保存换行分隔的json(也称为linejson、jsonlines、.jsonl文件)的模式,python,json,line,newline,jsonlines,Python,Json,Line,Newline,Jsonlines,使用Python,我将json文档保存到单独的行中,如下所示: from bson import json_util # pymongo with open('test.json', 'ab') as f: for document in documents: f.write(json_util.dumps(document)+'\n') with open('test.json') as f: for line in f: document =
from bson import json_util # pymongo
with open('test.json', 'ab') as f:
for document in documents:
f.write(json_util.dumps(document)+'\n')
with open('test.json') as f:
for line in f:
document = json_util.loads(line)
然后像这样读:
from bson import json_util # pymongo
with open('test.json', 'ab') as f:
for document in documents:
f.write(json_util.dumps(document)+'\n')
with open('test.json') as f:
for line in f:
document = json_util.loads(line)
轻松和简单让我觉得一定有一个陷阱?这就是linejson(又名)的全部功能吗?是的,这就是它的全部功能。您是否遇到了实际问题?JSON可以包含换行符吗?我正在努力避免潜在的问题。我已经用包含换行符的json对它进行了测试,它似乎工作得很好。但我不想从一个月后醒来,突然说:“哦,不”。对于长时间运行:如果在写中间中断,然后重新启动,文件就会损坏。是否有一种模式可以在每个打开的页面上进行验证(因为我正在添加)?不一定,但肯定会发生。你可以用不同的方法来处理这个问题;最好的方法取决于您的使用细节。您可以做的一件事是确保读取器代码忽略无效行。您也可以在继续追加数据之前,以读/写方式打开文件并检查最后一行。谢谢。所以:对于我的日志文件,比如案例:打开读/写-检查最终换行符-如果没有,添加-然后进行第一次新的写入。然后在读取代码中使用
try/except
,以捕获无效文档。这种组合将使损坏仅限于中断的文档。听起来对吗?听起来差不多对,是的。您甚至不必丢失中断的文档;只是在f.write(…)之后才将其标记为已编写;f、 flush()
成功完成。