S3 показать последние измененные ведра

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

#питон #amazon-веб-сервисы #amazon-s3

Вопрос:

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

Я использую это:

 top_level_folders[folder]['modified'] = obj.last_modified  

и добавление к отчету здесь:

 report.add_row([folder[1]['name'], folder[1]['objects'],  str(round(folder[1]['size'],2)), status, folder[1]['modified']])  

Я попытался добавить

 =obj.last_modified, reverse=True but keep getting invalid syntax errors.  

Вот как выглядит отчет:

Образец Отчета

Ответ №1:

Я не совсем уверен в том, что вы делаете, когда дело доходит до написания отчета, но приведенный ниже код вернет список словарей с именем каждой корзины и временем последнего изменения файла, например. ,

 [  {  'Folder': 'bucket_1',  'Last Modified': '2021-11-30 13:10:32 00:00'  },  {  'Folder': 'bucket_2',  'Last Modified': '2021-09-27 17:18:27 00:00'  } ]  
 import datetime  import boto3  s3_client = boto3.client('s3',  aws_access_key_id="AKXXXXXXXXXXXXXXXXXX",  aws_secret_access_key="YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY",  region_name="eu-west-2"  )   def find_last_modified_file_in_bucket(bucket_name: str) -gt; datetime:  last_modified = []  for bucket_object in s3_client.list_objects(Bucket=bucket_name)["Contents"]:  last_modified.append(bucket_object["LastModified"])   return max(last_modified)   def fetch_last_modified() -gt; [{}]:  last_modified_file_by_bucket: list[{}] = []  for bucket_name in list(map(lambda bucket: bucket["Name"], s3_client.list_buckets()["Buckets"])):  latest_time_of_last_modified_file: datetime = find_last_modified_file_in_bucket(bucket_name)  last_modified_file_by_bucket.append(  {  "Folder": bucket_name,  "Last Modified": str(latest_time_of_last_modified_file)  }  )   return last_modified_file_by_bucket  

Без исходного кода или знаний о типе folder я не могу с уверенностью сказать , как вы будете использовать приведенный выше код для обновления папки, но, скорее всего, все сведется к повторению dict возвращенного fetch_last_modified() . Например.,

 def update_report(report: Report, folder_with_last_modified: dict):  for folder in folder_with_last_modified:  report.add_row(folder['Folder'], folder['Last Modified'])   folder_with_last_modified = fetch_last_modified() update_report(report, folder_with_last_modified)  

Комментарии:

1. Спасибо, Блэр, я добавил скриншот отчета, который может лучше объяснить, что я пытаюсь сделать.

2. Итак, «Папка»-это имя корзины, а «Последнее изменение» — это время, когда последний измененный файл в этой корзине был изменен в последний раз?

3. Да, именно так, но, как вы можете видеть, он показывает мне первый измененный файл в корзине, а не последний.

4. Обновил свой ответ, чтобы он соответствовал заголовкам столбцов в вашей электронной таблице, но я не могу дать полный ответ, не зная происхождения folder .