【发布时间】:2019-08-16 07:50:37
【问题描述】:
我正在尝试使用 python 脚本生成的新信息编辑元文件,并且不想只是将信息附加到新的 JSON 对象,而是更新读取的信息。
作为输入,我有这样的内容:
{
"foo1": [
{
"bar1": 0,
"bar2": 1337
},
...
}
到目前为止,我的代码读取信息并将其存储在字典中。之后,此文件中的信息将被删除并替换为更新的字典。代码如下:
...
outputData = {"foo2": [{"bar3": True, "bar4": 123}]}
with open(metaFile, 'r+') as f:
metaData = json.load(f)
f.seek(0)
f.truncate()
metaData.update(outputData)
f.write(json.dumps(metaData, indent=2))
f.close()
...
结果如预期的那样:
{
"foo1": [
{
"bar1": 0,
"bar2": 1337
}
],
"foo2":[
{
"bar3": true,
"bar4": 123
}
]
}
现在我的确切问题是,是否可以以这样的方式编辑文件,文件中的内容不会首先被删除并再次写入?因为如果在初始化之后元数据发生了什么事,信息就消失了。 将 'r+' 参数更改为 'w+' (+ 是可选的)将创建一个新文件,而不是先从它读取,此时整个数据都消失了。使用“a”,输出数据不能更新然后添加,因为它会重写已经给定的信息。如果不更新元数据,它只会创建一个新对象,这不是我的想法。
【问题讨论】:
-
可能是这样:写入新文件,删除旧文件,重命名?那么如果在此过程中发生某些事情,您仍然会拥有旧文件/新文件