![](/img/trans.png)
[英]Merging multiple JSON files into single JSON file in S3 from AWS Lambda python function
[英]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.