我正在尝试修改JSON文件中的值,我尝试了以下代码,但未更改任何内容,因此我不确定自己在做什么错...
def file_filtering(file):
with open(file, 'r') as f:
data = json.load(f)
f.close()
for elem in data['features']:
elem = elem[:-1]
with open(file, 'w') as f:
json.dump(data, f, indent=4, separators=(',', ': '), sort_keys=False)
f.close()
我试图通过仅删除最后一个字符'/'而不更改URL下的值来更改URL。
"features": {
"https://services.runescape.com-ow.top/weblogin/loginForm/": {
"activex_count": 0,
"addeventlistener_count": 0,
"alert_count": 0,
}
}
问题来源:stackoverflow
with open(file, 'r') as f: data = json.load(f) data['features'] = { key.rstrip('/'): value for key, value in data['features'].items()} with open(file, 'w') as f: json.dump(data, f, indent=4, separators=(',', ': '), sort_keys=False)
您遇到的问题是elem = elem [:-1]只是在更改elem变量,而没有真正更改字典的键。
通常,很难从适当的位置更改词典的键...完全创建一个新词典要容易得多。您可以使用dict理解来做到这一点,例如:
{key[:-1]: value for key, value in data['features'].items()}
您可以在JSON数据中替换为:
data['features'] = {
key[:-1]: value
for key, value in data['features'].items()}
您可以做得更好,而不是砍掉键的最后一个字符,可以使用rstrip()
在结尾处显式地去除斜杠:
data['features'] = {
key.rstrip('/'): value
for key, value in data['features'].items()}
放在一起:
with open(file, 'r') as f:
data = json.load(f)
data['features'] = {
key.rstrip('/'): value
for key, value in data['features'].items()}
with open(file, 'w') as f:
json.dump(data, f, indent=4, separators=(',', ': '), sort_keys=False)
注意,您不需要显式调用f.close(),而在上下文管理器中打开文件(就像with语句一样)会在您离开文件后自动将其关闭。
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。