#amazon-web-services #amazon-s3 #boto
#amazon-web-services #amazon-s3 #boto
Вопрос:
Если в корзине слишком много файлов, и я хочу получить только 100 новейших файлов, как я могу получить только этот список?
s3.bucket.похоже, у list нет этой функции. Есть ли кто-нибудь, кто это знает?
пожалуйста, дайте мне знать. Спасибо.
Ответ №1:
Нет способа выполнить этот тип фильтрации на стороне службы. API S3 его не поддерживает. Возможно, вы сможете выполнить что-то подобное, используя prefixes
в своих именах объектов. Например, если вы назвали все свои объекты, используя шаблон, подобный этому:
YYYYMMDD/<objectname>
20140618/foobar (as an example)
вы могли бы использовать prefix
параметр ListBucket
запроса в S3, чтобы вернуть только тот объект, который был сохранен сегодня. В boto это будет выглядеть так:
import boto
s3 = boto.connect_s3()
bucket = s3.get_bucket('mybucket')
for key in bucket.list(prefix='20140618'):
# do something with the key object
Вам все равно придется извлекать все объекты с этим префиксом, а затем сортировать их локально на основе их last_modified_date
, но это было бы намного проще, чем перечислять все объекты в корзине и затем сортировать.
Другим вариантом было бы сохранить объект метаданных объектов S3 в базе данных, такой как DynamoDB, а затем запросить эту базу данных, чтобы найти объекты для извлечения из S3.
Вы можете узнать больше об иерархическом списке в S3 здесь
Ответ №2:
Можете ли вы попробовать этот код. Это сработало для меня.
import boto,operator,time
con = boto.connect_s3()
key_repo = []
bucket = con.get_bucket('<your bucket name>')
bucket_keys = bucket.get_all_keys()
for object in bucket_keys:
t = (object.key,time.strptime(object.last_modified[:19], "%Y-%m-%dT%H:%M:%S"))
key_repo.append(t)
key_repo.sort(key=lambda item:item[1], reverse=1)
for key in key_repo[:10]: #top 10 items in the list
print key[0], ' ',key[1]
PS: Я новичок в Python, поэтому код может быть не оптимизирован. Не стесняйтесь редактировать ответ, чтобы предоставить лучший код.
Комментарии:
1. Спасибо за ваш ответ, но я думаю, что если есть два много ключей корзины, это займет слишком много времени. Извините, мой вопрос был неясен. Теперь, я думаю, я хочу знать, хранит ли AWS данные, упорядоченные по времени создания, и пользователь может запросить только самый новый документ 100.