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

如何使用Boto3获取S3存储桶中的文件名列表

如何获取S3存储桶中所有文件名的列表

你运行代码后出现的报错是类型错误:'s3.ObjectSummary' 对象不可用下标访问,问题出在你试图用字典下标(i['Contents']['key'])访问ObjectSummary对象,但该对象并非字典,不支持这种访问方式。

原代码的问题点:

  • 重复初始化了S3实例:先创建boto3.client('s3')后又覆盖为boto3.resource,只需保留一个资源实例即可
  • 错误的属性访问方式:遍历s3.Bucket('xyzbucket').objects.all()得到的每个元素是ObjectSummary对象,文件名(对象键)需通过.key属性获取,而非字典的['Contents']['key']路径

修正后的代码

简洁写法(推荐):

import boto3

# 初始化S3资源
s3 = boto3.resource(
    service_name='s3',
    region_name='us',
    aws_access_key_id='pjh',
    aws_secret_access_key='mm'
)

# 直接遍历并收集所有文件名
file_names = [obj.key for obj in s3.Bucket('xyzbucket').objects.all()]

# 输出结果
print(file_names)

保留原代码结构的修正版:

import boto3
import pandas as pd

s3 = boto3.resource(
    service_name='s3',
    region_name='us',
    aws_access_key_id='pjh',
    aws_secret_access_key='mm'
)

ob = []
for i in s3.Bucket('xyzbucket').objects.all():
    ob.append(i)

test = []
for i in ob:
    # 替换为属性访问方式
    test.append(i.key)

补充说明

如果存储桶内文件数量极大,objects.all()会自动处理分页逻辑,无需额外操作;若需要自定义分页参数,可使用client的list_objects_v2方法配合分页器实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:36:01