我正试图用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”时,输出数据不能更新然后添加,因为它将重写已经给定的信息。在不更新元数据的情况下,它只会创建一个新对象,这不是我的想法。你知道吗
您可以按如下方式编写代码,也可以使用MongoDB。你知道吗
在您的例子中,如果您确定更改后的文件大小始终等于或大于文件中当前的大小,则可以直接调用
f.write(data)
。 这样,您就不必在写入文件之前截断(或丢失)文件。你知道吗另外,当您使用
with
语法打开一个文件时,一旦with块结束,它将自动关闭。你知道吗最后,您的代码将如下所示:
相关问题 更多 >
编程相关推荐