提问人:noydb 提问时间:9/16/2022 更新时间:9/16/2022 访问量:29
更新 json 文件中的键值,维护文件完整性,Python 3
Update key values in file of json, maintain file integrity, Python 3
问:
我有包含 ~35k 行的文件,我只需要更改键 base1 中某些项目的值,如下所示。我需要更改 id 和 title 值并保存相同的文件。比如,title 变成“title abc”,id 变成“789”。
例如,之前:
"base1": {
"base1base2": [
{
"id": "123",
"title": "title xyz",
"visibility": true
}
],
"title": "title xyz"
}
经过一些研究和反复试验,下面这奏效了。我做了与下面类似的操作(没有缩进),但是当我预计文件大小几乎没有变化(如果有的话)时,我的文件大小减少了一半。格式化消失了。我看到有人建议添加缩进部分,如下所示,所以我这样做了,但是文件大小比我预期的要大一些,并且添加了大量的空格和\n。
wmjf = 'webmap.json'
with open(wmjf, "r") as jf:
data = json.load(jf)
data['base1']['base1base2'][0]['id'] = '789'
data['baseMap']['baseMapLayers'][0]['title'] = 'title abc'
data['baseMap']['title'] = 'title abc'
with open(wmjf, "w") as jf:
json.dump(json.dumps(data, indent=4), jf)
jf.close()
在进行这些非常小的值更改时,我能否获得一些帮助,了解我在保持文件原样方面做错了什么,它是完整性。我想知道下面的结果是否真的适合我需要的东西(这将大小减小了一半,没有格式,但我怀疑它可能适用于重新发布 - 很快就会根据响应尝试)
with open(wmjf, "w") as jf:
json.dump(data, jf)
而且,这段代码是好的、正确的、pythonic的吗?我不是开发人员,这些年来只需要在这里和那里做一些小脚本,所以我很感激我的尝试,谢谢!此外,我看到一些类似问题的答案,使用开放模式 r+ 或 w+ -- + 是什么意思?
答:
您不需要同时调用 和 。您需要将数据转换为 JSON,然后将该 JSON 转换为另一个 JSON 字符串,以便第一个 JSON 中的换行符在文件中转换为。json.dump()
json.dumps()
\n
只需调用并指定那里的缩进即可。json.dump()
with open(wmjf, "w") as jf:
json.dump(data, jf, indent=2)
上一个:每个文件与文件夹的 Python shutil 复制选项
下一个:如何停止动画
评论
indent=2
indent=2
json.dump
json.dumps
json.dump(data, jf, indent=2)