Доступ к ключам и объектам через python Boto и AWS S3

#python #amazon-web-services #amazon-s3 #boto

#python #amazon-веб-сервисы #amazon-s3 #boto

Вопрос:

Я прочитал: https://ceph.com/docs/master/radosgw/s3/python /

Однако я ищу способ доступа к AWS S3 без использования только части ключа.

Итак, у меня может быть такой ключ:

myplace / yourplace / ourplace / размер / цвет

У меня может быть размер и цвет, как я могу получить только ключи, соответствующие этому?

Нужно ли мне делать что-то вроде:

 TheDesiredKeys
For k in all keys
     if key.split("/")[4] == desiredSize amp;amp; key.split("/")[5] == desiredColor
         TheDesiredKeys.append(k)
 

Затем перейдите к извлечению всех объектов в этих местах? У меня сложилось впечатление, что есть более простой способ?

Также я пытался:

  bucket.list()
 

Но во всех примерах это было похоже:

  b - bucket.list()
 for key in b:
      doSomething
 

Однако я надеялся просто получить все ключи в объекте. Однако, когда я смотрю на корзину.list () в отладчике я не вижу всех ключей?

Ответ №1:

Ключи AWS S3 индексируются в лексическом порядке

Довольно легко найти ключ с помощью prefix.

Но для суффикса или чего-то еще, что на самом деле не является префиксом, вам нужно перебирать все ключи.

Как это сделать для prefix

спецификация boto для bucket.get_all_keys параметра предложений prefix

 >>> import boto
>>> con = boto.connect_s3()
>>> bucket_name="bucketname"
>>> bucket=con.get_bucket(bucket_name)
>>> keys = bucket.get_all_keys(prefix="region/cz/")
>>> for key in keys:
...     print key.name
...
region/cz/Prague.gif
region/cz/Ostrava.gif
 

Примечание: boto.connect_s3() предполагается, что вы настроили систему, для этого я использую BOTO_CONFIG переменную среды, но вы также можете указать учетные данные непосредственно в этом вызове.