Использование результата данных объекта списка для определения того, какие файлы устарели - PullRequest
0 голосов
/ 06 августа 2020

У меня есть сценарий python на AWS Lambda, который я запустил (в основном c). Я получил результаты после нескольких попыток, и теперь я пытаюсь сканировать данные, чтобы определить, являются ли какие-либо из «LastModified» дат старше 4 часов (на основе текущей даты и времени).

Есть какой-нибудь простой способ сделать это?

import boto3
import os
from datetime import datetime

def lambda_handler(event, context):
   s3 = boto3.client('s3')
   bucket = 'mybucket'
   resp = s3.list_objects_v2(Bucket=bucket, Prefix='JSON/')
   print(resp['Contents'])

Вот образец ответа (список dicts)

[{'Key': 'JSON/File1.json', 'LastModified': datetime.datetime(2019, 5, 28, 18, 11, 42, tzinfo=tzlocal()), 'ETag': '"d41d8cd98f00b204e9800998ecf8427e"', 'Size': 0, 'StorageClass': 'STANDARD'}, {'Key': 'JSON/File2.json', 'LastModified': datetime.datetime(2020, 8, 6, 12, 55, 9, tzinfo=tzlocal()), 'ETag': '"e8534a11ac08968619c05e28641a09b8"', 'Size': 7600141, 'StorageClass': 'STANDARD'}, {'Key': 'JSON/File3.json', 'LastModified': datetime.datetime(2020, 8, 6, 12, 56, 9, tzinfo=tzlocal()), 'ETag': '"bac4bfc4daa1f4a4982b9ec0c5f11c62"', 'Size': 38430159, 'StorageClass': 'STANDARD'}

1 Ответ

1 голос
/ 06 августа 2020

Это должно работать для списка слов, который вы мне показали. В первую очередь у меня были проблемы с tzlocal (). Мне пришлось установить tzinfo моего объекта datetime.now () на tzlocal () ( ссылка ), тогда это сработало. Надеюсь, это поможет вам:

import datetime
from dateutil.tz import tzlocal

data = [
    {'Key': 'JSON/File1.json', 'LastModified': datetime.datetime(2019, 5, 28, 18, 11, 42, tzinfo=tzlocal()), 'ETag': '"d41d8cd98f00b204e9800998ecf8427e"', 'Size': 0, 'StorageClass': 'STANDARD'},
    {'Key': 'JSON/File2.json', 'LastModified': datetime.datetime(2020, 8, 6, 12, 55, 9, tzinfo=tzlocal()), 'ETag': '"e8534a11ac08968619c05e28641a09b8"', 'Size': 7600141, 'StorageClass': 'STANDARD'},
    {'Key': 'JSON/File3.json', 'LastModified': datetime.datetime(2020, 8, 6, 12, 56, 9, tzinfo=tzlocal()), 'ETag': '"bac4bfc4daa1f4a4982b9ec0c5f11c62"', 'Size': 38430159, 'StorageClass': 'STANDARD'}
]

filtered = list(filter(lambda x: x["LastModified"] < (datetime.datetime.now().replace(tzinfo=tzlocal()) - datetime.timedelta(hours=4)), data))

print(filtered)
#[{'Key': 'JSON/File1.json', 'LastModified': datetime.datetime(2019, 5, 28, 18, 11, 42, tzinfo=tzlocal()), 'ETag': '"d41d8cd98f00b204e9800998ecf8427e"', 'Size': 0, 'StorageClass': 'STANDARD'}]
...