Python - поиск нескольких файлов в подпапке, находящейся внутри корзины, с помощью boto3 - PullRequest
1 голос
/ 28 мая 2020

Итак, у меня есть требование загрузить все файлы JSON, которые выгружены во вложенную папку, находящуюся внутри корзины.

Есть ли способ сделать это?

Я пробовал следующий способ:

for key in bucket_name.objects.filter(Prefix='report'):
        print key
        s3_client.download_file(key, bucket_name, '{}/{}'.format(current_directory, key)) 

И при этом получаю следующую ошибку:

AttributeError: 'str' object has no attribute 'objects'

Ответы [ 2 ]

1 голос
/ 28 мая 2020

К сожалению, S3 не имеет функции для перечисления объектов в корзине по суффиксу, например .json. Единственный способ - перебрать объекты на стороне клиента и программно их отфильтровать.

Вы можете разработать свой собственный python сценарий для этого, как вы уже начали. Но это настолько распространенная операция, что для нее уже написано много рецептов . Некоторые из них для bash и python можно найти здесь .

Эти решения хороши для анализа ad hoc. Но если у вас много файлов и вам нужно регулярно их искать, это может занять много времени. Одним из решений этого может быть использование S3 Inventory до , создание списка csv ваших объектов на ежедневной или слабой основе, а затем использование python файла csv, созданного для идентифицировать интересующие файлы.

Вы можете даже полностью автоматизировать этот процесс, так как вы можете получать уведомление, когда инвентарь доступен, и запускать лямбду, которая будет фильтровать файл csv.

0 голосов
/ 28 мая 2020

При перечислении файлов, присутствующих в корзине, я получал вывод как -

s3.ObjectSummary(bucket_name='', key=u'file_Searching_for')

После попытки нескольких вариантов я пришел к следующему коду-

def main():

    objs = bucket_name.objects.filter(Prefix=Prefix_name)

    for obj in objs:
        filename = obj.key
        if filename.endswith('.json'):
           <download the file if you want to> 

Из приведенного выше кода , он даст вам имя файла с префиксом, который вы можете разделить и загрузить файл. Это поможет вам загрузить любое количество файлов, находящихся в корзине, которая заканчивается на. json

Сообщите мне, поможет ли вам ответ. Мне помогло.

Спасибо

...