- Начало обновления -
Возможно, было бы лучше создать объекты в S3 с префиксами даты.
{ведро} / гггг / мм / дд / {объект}
Пример: myS3bucket / 2018/12/29 / myfile.txt
При таком подходе ваш запрос становится простым, чтобы выяснить, есть ли у вас какие-либо файлы на этот конкретный день, а также номера файловсписок, который вы получаете, становится коротким.
prefix="/"+str(today.year)+"/"+str(today.month)+"/"+str(today.day)+"/"
objs = bucket.objects.filter(Prefix=prefix).all()
- обновление завершено -
Я не уверен, что вы дали полный код, но в приведенном выше фрагменте есть некоторые проблемы с отступами.Я только что проверил ниже, и он работает нормально, и я получаю правильную last_modified
дату.
Пожалуйста, убедитесь, что вы находитесь в правильном регионе, как ведро.Также last_modified
находится в UTC
часовом поясе, поэтому ваше сравнение должно учитывать это.
import boto3
from datetime import date
import botocore
# Get Today's date
today = date.today()
# Get Objects date
s3 = boto3.resource('s3',region_name='us-east-1')
bucket = s3.Bucket('xxxx')
prefix="/"+str(today.year)+"/"+str(today.month)+"/"+str(today.day)+"/"
objs = bucket.objects.filter(Prefix=prefix).all()
def get_object_check_alarm():
try:
for obj in objs:
print(obj)
lastobjectdate = (obj.last_modified).date()
except botocore.exceptions.ClientError as e:
error_code = e.response['Error']['Code']
if error_code == '404':
print("There is no file")
# Compare with defined date
if today == lastobjectdate:
print(today)
print(lastobjectdate)
print("OK, lastest file comes from today")
else:
print(today)
print(lastobjectdate)
print("Mail sent")
get_object_check_alarm()
Ниже приведен результат.Я нахожусь в зоне EST, поэтому дата все еще 12/28, но дата создания объекта пришла как 12/29, так как она уже 12/29 в зоне UTC, когда объект был создан.
s3.ObjectSummary (bucket_name= 'xxxx', ключ = 'гггг /')
2018-12-28
2018-12-29
Письмо отправлено