博客园  :: 首页  :: 管理

使用AWS SDK for Python (Boto3) 的 S3的client下的list_objects_v2, 可以列出一个s3 bucket 桶的所有对象,可以返回如下几个重要的字段的

Key, LastModified, ETag, Size, StorageClass 

实现的核心代码如下:

其中在编辑中,有几个说明如下:

1、Console页面上可以创建一个空的文件夹,这样在列出对象时,也是包括目录条目的,但是目录条目肯定是以/结尾的,而且大小为0

2、不能以大小判断是目录还是真正的文件对象,因为笔者测试,使用aws s3 cp 也成功上传了一个0大小的文件对象

3、笔者在console上测试了,将一个s3目录中的文件对象删除了,再返回时,目录也不存在了

4、不是所有的目录都会以对象的形式返回的,有的只会返回目录下的文件对象条目

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

另外,我们经常可能还会用到,只列出s3 bucket中的某个目录下的所有对象(包括子目录下的所有)

这时,就需要结合Prefix参数了,即先传入Bucket参数,再传入Prefix 参数

S3ObjectsResponse=S3client.list_objects_v2(Bucket='qq-5201351',Prefix='My-Note/linux/')

也有如下几个注意点:

1、Prefix不要包含s3 bucket的名称,从最前面的目录开始,可以以目录名/结尾,也可以以部分字符作为Prefix,去匹配符合条件的对象

2、如下代表的是列出My-Note/linux/下的所有对象(返回的数据,也是可能会包含目录条目的)

3、如果非常确定是 My-Note/linux/ 目录下的,那么最严谨的方式就是后面添加上 / 结尾 (因为在s3中的目录同级,是可以创建与目录同名的对象的)

 

最后,提醒一下,关于S3.Client.list_objects_v2(**kwargs) 的介绍中有提到 Returns some or all (up to 1,000) of the objects in a bucket with each request

因此如果bucket中的对象数太多,可能还需要结合分页技术,才能得到全部的s3对象

 

 

 

尊重别人的劳动成果 转载请务必注明出处:https://www.cnblogs.com/5201351/p/17297557.html