如何使用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
相关产品推荐
相关产品推荐

