将新文件添加到目录时,读取并重命名密钥json文件

时间:2019-02-08 14:54:29

标签: python-3.x

我有一个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()

1 个答案:

答案 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文件中数据的结构。但是,如果只是一个简单的名称/值对列表,它将很好地工作