boto3 list_objects_v2 StartAfter无法正常工作

时间:2019-02-04 22:49:16

标签: amazon-web-services amazon-s3 boto3

使用list_objects_v2时

  

s3client.list_objects_v2(Bucket = bucket_name,                                         StartAfter = starts_after)

从boto3软件包中,我注意到,如果我使用存储桶中类似

的文件夹中的密钥,
  

存储桶-'some_bucket'

     

键-'adb / dcvf / staging0000.txt'

然后StartAfter无法正常工作,它将返回整个键集。

但是,如果键直接位于存储桶中而没有类似的任何文件夹,则StartAfter可以完美地工作。

  

存储桶-'some_bucket'

     

键-'staging0000.txt'

这是一个已知问题,对此有任何解决方法

2 个答案:

答案 0 :(得分:0)

对我来说很好用...

import boto3

client=boto3.client('s3',region_name='ap-southeast-2')

# List all objects
response = client.list_objects_v2(Bucket='my-bucket')
print([o['Key'] for o in response['Contents']])

print('--------')

# List objects from foo/ onwards
response = client.list_objects_v2(Bucket='my-bucket', StartAfter='foo/')
print([o['Key'] for o in response['Contents']])

答案 1 :(得分:0)

版本2:

您的要求似乎是获取在特定时间键之后已添加的对象的键列表

这不适用于StartAfter参数,该参数仅列出在给定字符串之后按字母顺序排列的键。

相反,您需要编写一个程序来获取对象列表,然后确定所需的键,例如:

import boto3

client=boto3.client('s3',region_name='ap-southeast-2')

# Obtain a list of objects in the bucket
response = client.list_objects_v2(Bucket='my-bucket')

# Make a dictionary of Key:Modified Date
objects = {object['Key']:object['LastModified'] for object in response['Contents']}

# Make a list of objects modified after a particular object
OBJECT_TO_COMPARE = 'foo.txt'
latest = [key for key in objects if objects[key] > objects[OBJECT_TO_COMPARE]]

# Print result
print ('\n'.join(latest))