将值添加到现有json文件而不重写它

时间:2014-11-08 23:15:21

标签: python json

我在JSON文件中的字典如下所示:

{
'key1':value1
'key2':value2
}

我正在编写一个循环,每次迭代都会在文件中为字典添加一个新密钥。例如,在一次迭代之后,文件中的字典如下所示:

{
'key1':value1
'key2':value2
'key3':value3
}

我想使用一种方法直接将新密钥附加到文件中的字典中。我不想读取文件,更改数据并再次将其写回。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

这是一个相当粗略的实现,假设文件以}结尾和换行符(解释为-2):

with open('data.json','rb+') as f:
    f.seek(-2,2)
    f.write(b"'new_key':new_value\n}\n")

答案 1 :(得分:0)

你可以通过找到最后的结束大括号,然后使用file.seek去那个位置来做到这一点。然后你可以写下你的新值,如下所示:

with open(path, 'rb+') as f:
    s = f.read()
    index = s.rfind('}')
    f.seek(index)
    f.write(',\n[YOUR JSON HERE]\n')
    f.write(s[index:])

请注意,如果您的结构实际上是一个列表,那么您需要使用],否则这应该是相同的。另请注意,根据您是否正常使用尾随逗号(即{a: 1, b: 13, c: 231,}),您可能要省略我在第一个write命令中添加的逗号。