#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
.