[我正在尝试修改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,
}
}
您遇到的问题是elem = elem[:-1]
只是在更改elem
变量,而没有真正在更改字典的键。
通常,很难从字典中更改键。要完全创建一个新字典要容易得多。您可以使用dict comprehension来执行此操作,例如:
{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
语句一样)将在您离开文件后自动将其关闭。