You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用boto3 S3.Bucket时报错'S3' object has no attribute 'Bucket'如何解决

问题原因

你使用boto3.client('s3')创建的是低阶S3客户端对象,该类没有Bucket属性,这是接口类型不匹配导致的报错,和大小写无关。
boto3提供两类S3操作接口:

  • 低阶client接口:直接映射S3原生API,所有方法都是和API一一对应的调用形式,不存在封装好的Bucket实例对象
  • 高阶resource接口:封装了面向对象的操作逻辑,可以直接调用Bucket()方法实例化桶对象,再调用对应的实例方法

解决方案

有两种适配方案可选:

方案1:改用resource接口,适配现有后续操作逻辑

如果要保留firstbucket.upload_fileobj的写法,把s3实例的创建方式改成resource即可,list_objects方法可以通过resource绑定的client调用:

import boto3

s3_file_path = "testunzipping/sample.csv.gz"
# 替换client为resource
s3 = boto3.resource('s3')
# 通过meta.client调用原client的list_objects方法
lst = s3.meta.client.list_objects(Bucket='testunzipping')['Contents']
firstbucket = s3.Bucket('testunzipping')
# 后续上传逻辑无需修改
firstbucket.upload_fileobj(destination_file_gz, s3_filename)

方案2:继续使用client接口,调整上传写法

如果不想修改原有s3实例的创建逻辑,直接用client自带的upload_fileobj方法即可,不需要实例化Bucket对象:

import boto3

s3_file_path = "testunzipping/sample.csv.gz"
s3 = boto3.client('s3')
lst = s3.list_objects(Bucket='testunzipping')['Contents']
# 直接调用client的上传方法,参数依次为:文件对象、桶名、S3对象路径
s3.upload_fileobj(destination_file_gz, 'testunzipping', s3_filename)

内容的提问来源于stack exchange,提问作者x89

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 00:36:05