5

我有一些数据的 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)

但是,此过程仅创建新的 json 对象(python dict)并将其作为新对象附加到输出 json 文件中,从而使该文件不是有效的 json 文件。

是否有任何简单的方法可以通过更新初始字典将新数据附加到 json 文件而不覆盖整个文件?

4

1 回答 1

11

一种方法是在文件中每行写入一个 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, "r") as json_file:
    for line in json_file:
        data = json.loads(line)
        process_data(data)

要更新/附加:

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

希望这可以帮助 :)

于 2013-03-14T17:44:21.877 回答