繁体   English   中英

如何从python中的aws s3编辑/重命名/删除多个json文件中的键和值

[英]how to edit/rename/remove keys and values in multiple json files from aws s3 in python

我在 AWS S3 存储桶中有一个文件夹和(子文件夹:文件夹 A 有子文件夹 B 和 C 等等)中有 JSON 文件,我想更改所有 JSON 文件的键名并删除一些键和值. 起初,我试图将我的文件夹 A 中的文件列表获取为:

def get_s3_list(bucket, prefix):
    s3 = boto3.client("s3")    
    objects = s3.list_objects(Bucket=bucket, Prefix=prefix)
    obj_list = [lc['Key'] for lc in objects['Contents']]
    return obj_list
s3_list = get_s3_list('bucket', 'prefix')
full_s3_list = [ll.split('/') for ll in s3_list]

json_list_files = []
for sub_list in full_s3_list:
     for sb in sub_list:
          if sb.endswith('.json') or sb.endswith('.JSON'):
              json_list_files.append(sub_list)

然后,我想重命名每个 json 文件中的一些键。 例如,一个 json 文件如下所示:

{
   "name": "Apple",
   "type": "sweet",
   "size": "12",
   "country": "Germany",
   "path": "s1",
   "other info": "not known",
}

对于所有文件,我想重命名键并删除一些键和值,例如获取

{
   "name of fruit": "Apple",
   "taste": "sweet",
   "size": "12",
   "path_id": "s1",

}

我知道如何从一个文件中只更改一个键名,但我不知道如何将其应用于所有文件和多个键名。 我已经尝试过了,但最后我无法得到我想要的:

new_names = { 'name'            : 'name of fruit' ,
              'type'      : 'taste' ,
              'size'        : 'size', 
              'path'       : 'path_id'
              }


for row in json_list_files:
  for k, v in new_names.items():
    for old_name in row:
      if k == old_name:
        row[v] = row.pop(old_name)

您可以先下载 s3 存储桶的内容,然后递归浏览 JSON 文件并使用 JSON 处理器(如jq )修改它们。 完成后,您可以运行aws s3 sync命令,以便将修改后的文件上传到存储桶。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM