如何使用boto3只检索S3中最后一个修改过的密钥

2024-09-30 16:25:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我只想从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")

使用此代码,当前结果不会输出最后修改的键。我试图将limit()增加到limit(10),但没有成功。在


Tags: objgettodaydateifs3bucketcode
1条回答
网友
1楼 · 发布于 2024-09-30 16:25:26

更新开始

也许,在S3中创建带有日期前缀的对象可能更好。在

{bucket}/yyyy/mm/dd/{object}

示例:myS3bucket/2018/12/29/我的文件.txt在

使用这种方法,您的查询变得很简单,可以确定您是否在特定的一天有任何文件,并且您检索到的文件数列表也会变短。在

prefix="/"+str(today.year)+"/"+str(today.month)+"/"+str(today.day)+"/"
objs = bucket.objects.filter(Prefix=prefix).all()

更新完成

我不确定你给出了完整的代码,但在上面的代码片段中有一些缩进问题。我刚在下面测试了一下,结果很好,我得到了正确的last_modified日期。在

请确保您在正确的区域作为存储桶。而且last_modified位于UTC时区,因此您的比较应该考虑这一点。在

^{pr2}$

下面是输出。我在EST区域,所以日期仍然是12月28日,但对象创建日期是12月29日,因为对象创建时已经是12月29日了。在

s3.ObjectSummary(bucket_name='xxxx', key='yyyy/')

2018-12-28

2018-12-29

Mail sent

相关问题 更多 >