Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python保存换行分隔的json(也称为linejson、jsonlines、.jsonl文件)的模式_Python_Json_Line_Newline_Jsonlines - Fatal编程技术网

使用python保存换行分隔的json(也称为linejson、jsonlines、.jsonl文件)的模式

使用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 =

使用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 = 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()
成功完成。