Как перебрать ведро s3, начиная с определенного объекта с помощью boto3? - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть большое количество объектов в ведре s3 (10 миллионов +).Я начал просматривать их и обрабатывать каждый, но мой процесс был прерван на полпути.Я хотел бы знать, возможно ли перезапустить цикл для определенного объекта.Например, я бы начал с объекта, который имеет ключ «test.jpeg».Я действительно не хотел бы начинать весь процесс заново.

Вот что у меня есть для зацикливания.

for bucket_obj in bucket.objects.filter():
    print bucket_obj.key

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

На мой взгляд, вы можете использовать marker свойство функции filter.Вы можете начать свой цикл с нужного marker.Если вы знаете, где происходит сбой вашего цикла, вы можете использовать getMarker и снова запустить цикл, используя это значение.Вот пример.

bucket.listObjects({Prefix: '2015-02', Marker: '2015-02-23-00:00:00'}, callback);

В качестве альтернативы, как плохая практика, вы можете хранить все объекты в list или dict.Пометить их как посещенные каждый раз, когда вы проходите через него, и если цикл завершается неудачей, то только объекты цикла, которые не посещаютсяЭтот метод может занять столько памяти, сколько у вас миллионов объектов.

0 голосов
/ 23 сентября 2019
for bucket_obj in bucket.objects.filter(Marker="test.jpg"):
    print bucket_obj.key
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...