Как получить только ключ last_modified в S3 с помощью boto3 - PullRequest
0 голосов
/ 28 декабря 2018

Я хочу получить только ключ last_modified из моего сегмента S3, с определенным префиксом, используя boto3.

# Get Today's date
today = datetime.date.today()

# Get Objects date
s3 = boto3.resource('s3',region_name=AWS_REGION)
bucket = s3.Bucket('xxx')
objs = bucket.objects.filter(Prefix='yyyy').limit(1)

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")

С этим кодом текущий результат не выводит последний измененный ключ.Я пытался увеличить предел () до ограничения (10), но безуспешно.

1 Ответ

0 голосов
/ 29 декабря 2018

- Начало обновления -

Возможно, было бы лучше создать объекты в 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

Письмо отправлено

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...