作为开发人员,我们经常需要list S3桶对文件进行一些处理,boto3提供了很多方法操作S3、EC2等,对于list 、descirbe等操作,建议大家分页处理,因为很多方法返回的数据是有限制的,并不是返回所有,所以针对一些数据量大的操作建议分页处理。
可以像下面这样写:
client = boto3.cient('s3')
//list S3中所有文件
objects = client.list_objects_v2(Bucket='mys3')
//list S3 中指定目录下的文件
objects = client.list_objects_v2(Bucket='mys3', Prefix='images/')
上面这样的写法默认最大只能 list 出1000个对象,如果objects中对象数量超过1000,剩下的对象就无法取出。当objects中对象数量超过1000时,objects就会多出一个’NextContinuationToken‘属性,这个属性表示第1001个对象的位置,下次从1001开始list。
如果S3文件数量超过1000,你可以这样写:
objects = {'NextContinuationToken':None}
while 'NextContinuationToken' in objects:
if objects['NextContinuationToken']:
objects = client.list_objects_v2(Bucket='mys3', ContinuationToken=objects['NextContinuationToken'])
else:
objects = client.list_objects_v2(Bucket='mys3')
for obj in objects:
pass
您的赞就是我写文章的动力,如果对您有一点点帮助的话,老铁,不要吝啬,请留下您的赞。
有其他问题的小伙伴,欢迎留言评论。