关于s3-bucket使用client.list_objects_v2列出所有的对象与指定目录下的所有对象
Posted on 2023-04-07 22:22 520_1351 阅读(1503) 评论(0) 编辑 收藏 举报使用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
作者:一名卑微的IT民工
出处:https://www.cnblogs.com/5201351
本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。
由于博主的水平不高,文章没有高度、深度和广度,只是凑字数,不足和错误之处在所难免,希望大家能够批评指出。
博主是利用读书、参考、引用、复制和粘贴等多种方式打造成自己的文章,请原谅博主成为一个卑微的IT民工!