Python 更新json文件

Python 更新json文件,python,json,Python,Json,我有一个包含一些数据的json文件,希望偶尔更新这个文件 我读了文件: with open('index.json', 'rb') as f: idx = json.load(f) with open('index.json', mode='a+') as f: json.dump(new_data, f, indent=4) 然后检查是否存在来自潜在新数据的密钥,如果密钥不存在,则更新文件: with open('index.json', 'rb') as f: i

我有一个包含一些数据的json文件,希望偶尔更新这个文件

我读了文件:

with open('index.json', 'rb') as f:
    idx = json.load(f)
with open('index.json', mode='a+') as f:
    json.dump(new_data, f, indent=4)
然后检查是否存在来自潜在新数据的密钥,如果密钥不存在,则更新文件:

with open('index.json', 'rb') as f:
    idx = json.load(f)
with open('index.json', mode='a+') as f:
    json.dump(new_data, f, indent=4)
然而,这个过程只是创建新的json对象(python dict)并将其作为新对象附加到输出json文件中,使该文件成为无效的json文件


有没有简单的方法可以通过更新初始dict将新数据添加到json文件而不覆盖整个文件?

一种方法是在文件中每行写入一个json对象。我正在使用这种方法,而且效果很好

一个很好的好处是,您可以更高效地读取文件(内存方面),因为您可以一次读取一行。如果您需要所有这些,那么在Python中组装一个列表是没有问题的,但是如果您不需要,那么您的操作速度要快得多,而且您还可以添加

因此,要开始编写所有对象,您需要执行以下操作:

with open(json_file_path, "w") as json_file:
    for data in data_iterable:
        json_file.write("{}\n".format(json.dumps(data)))
然后高效读取(无论文件大小如何,都会消耗很少的内存):

要更新/追加:

with open(json_file_path, "a") as json_file:
    json_file.write("{}\n".format(json.dumps(new_data)))

希望这有帮助:)

相关:在
'w'
模式下打开文件,而不是在append+write模式下。是否有实际理由不只是重写整个文件?这听起来可能会很难看。另外,基础文件不支持“插入”操作,因此,如果您的更新接近开始,您至少必须重写文件的其余部分。@Martijn Pieters:这将覆盖文件(初始数据),我使用“附加”作为附加数据。@theta:它不是这样工作的;您可能通过追加来更新JSON结构,但文件不是一回事。你需要重写它。谢谢@kgr,这看起来是个好把戏。我想这种方式是不可能缩进的。@theta-不客气。是的,如果每行存储一个对象,则不可能在文件中完全打印(缩进)JSON。但是,您可以在每个JSON对象之后都有一些标记,并使用它来区分一个对象的结束和另一个对象的开始(这里
\n
就是这样一个标记,它也起着特殊的作用)。这将是更棘手的得到正确的,但肯定是可能的。这样,文件中就可以有缩进,因为换行符将被忽略。整个想法不是在文件中有一个JSON对象,而是多个,这样您可以在需要时以一种高效的方式添加更多的JSON对象。。。