如何通过Python向S3存储桶子文件夹上传对应value.json文件
问题原因
你的代码运行结果不符合预期,是两个逻辑错误导致的:
- 写入S3的Body部分调用
json.dumps时传入了完整的My_dict,所以每个生成的JSON文件都包含全量键值对 - S3对象Key的拼接规则不对:当前逻辑是把文件后缀从
.csv替换为.json,最终生成的是和CSV同名的JSON文件(比如folder_1/folder_2/folder_3/file_1.json),不是你需要的同目录下固定命名的value.json
修正代码
遍历字典时单独构造当前条目对应的单键值对,同时通过路径切分拿到CSV所在的目录,拼接出value.json的正确S3路径即可:
import json import boto3 s3 = boto3.client('s3') bucket_name = "替换为你的S3桶实际名称" My_dict = { 'folder_1/folder_2/folder_3/file_1.csv': 'value_1', 'folder_1/folder_4/folder_5/file_2.csv': 'value_2' } for csv_full_path, matched_value in My_dict.items(): # 从右往左按第一个/切分,拿到CSV文件所在的文件夹路径,适配多层目录场景 target_folder = csv_full_path.rsplit('/', 1)[0] # 拼接value.json的完整S3键 json_object_key = f"{target_folder}/value.json" # 仅写入当前CSV对应的单条键值对 s3.put_object( Bucket=bucket_name, Body=json.dumps({csv_full_path: matched_value}), Key=json_object_key )
运行结果
代码执行后会在S3生成两个符合要求的文件:
- 键为
folder_1/folder_2/folder_3/value.json,内容为{"folder_1/folder_2/folder_3/file_1.csv": "value_1"} - 键为
folder_1/folder_4/folder_5/value.json,内容为{"folder_1/folder_4/folder_5/file_2.csv": "value_2"}
补充:你问题描述里写的第二个value.json的预期路径存在笔误,把路径中的
folder_4错写为folder_2,上述代码是按照你给出的原始字典路径实现的,和CSV实际存放位置完全匹配。
内容的提问来源于stack exchange,提问作者Yag_r
相关产品推荐
相关产品推荐

