如何使用Python通过boto3直接将JSON数据写入S3中的文件
使用boto3将Python JSON数据直接写入S3的方法
前置条件
- 已安装boto3:可执行
pip install boto3完成安装 - 已配置有效的AWS访问凭证(支持本地凭证文件、环境变量、ECS/EKS/EC2 IAM角色等多种认证方式)
实现步骤
你不需要先把数据写到本地磁盘再上传,可以直接将Python对象序列化为JSON字符串后转字节流,直接上传到S3:
- 导入依赖库
- 将Python列表/字典对象序列化为JSON格式的字节流
- 调用boto3的S3上传接口直接写入
import json import boto3 # 你的原始数据 a = [{"a":1, "b":1}, {"a":3, "b":3}] # 初始化S3客户端 s3 = boto3.client('s3') # 序列化为JSON字节流,ensure_ascii=False可保留非ASCII字符不转义 json_bytes = json.dumps(a, ensure_ascii=False).encode('utf-8') # 直接写入S3,替换为你自己的桶名和文件路径 s3.put_object( Bucket='你的S3桶名称', Key='存储的文件路径/xxx.json', Body=json_bytes, ContentType='application/json' # 可选,指定Content-Type方便后续直接在浏览器访问时自动识别格式 )
其他可选写法(使用S3 Resource)
如果你习惯用boto3的Resource风格接口,也可以用下面的写法:
import json import boto3 a = [{"a":1, "b":1}, {"a":3, "b":3}] s3 = boto3.resource('s3') s3.Object('你的S3桶名称', '存储的文件路径/xxx.json').put( Body=json.dumps(a, ensure_ascii=False).encode('utf-8'), ContentType='application/json' )
注意事项
- 请确保你的AWS账号对应凭证有目标S3桶的
s3:PutObject权限 - 如果需要压缩后上传,可以直接在序列化后加gzip压缩逻辑,不需要落地本地文件
内容的提问来源于stack exchange,提问作者Sundar
相关产品推荐
相关产品推荐

