我有一个python脚本,正在使用inotify监视文件夹,当添加新的json文件时,我希望打开文件,并按如下所示重命名json文件的键(例如- aa,b-bb)。每个键值对中的值应保持不变。
下面是我试图完成此任务的脚本的摘录。
运行时出现错误
AttributeError:'str'对象没有属性'pop'
我也很确定这不是最好或最有效的方法,因此欢迎提出建议...
import glob
names_key = { 'a' : 'aa' ,
'b' : 'bb',
'c' : 'cc',
'd' : 'dd',
'e' : 'ee',
'f' : 'ff',
'g' : 'gg',
'h' : 'hh'
}
destinationFolder = "inspect"
all_files = glob.glob('inspect/*.json')
def rename_json():
for row in all_files:
for k, v in names_key.items():
for old_name in row:
if k == old_name:
row[v] = row.pop(old_name)
if __name__ == "__main__":
rename_json()
答案 0 :(得分:2)
您可以使用json.loads(your_entire_json_file_as_a_string)将JSON文件中的JSON转换为字典
然后,您可以直接键入json以更改相应的密钥。
import json
def get_json_file_as_string(filepath):
with open(filepath) as json_file:
return json_file.read().replace('\n', '')
file_path = changed_json_file_path
names_key = { 'a' : 'aa' , 'b' : 'bb', }
json_dict = json.loads(get_json_file_as_string(changed_json_file_path))
json_dict = {'aa':1, 'bb':2}
for new_key, old_key in names_key.items():
if old_key in json_dict:
json_dict[new_key] = json_dict[old_key]
json_dict.pop(old_key)
print(json_dict)
这取决于JSON文件中数据的结构。但是,如果只是一个简单的名称/值对列表,它将很好地工作