【问题标题】:How to list last modified file in S3 using Python如何使用 Python 在 S3 中列出最后修改的文件
【发布时间】:2022-02-10 05:19:29
【问题描述】:

我正在尝试使用以下方法获取 S3 中最后修改的文件:

def lambda_handler(event, context):
    
    import boto3
    
    bucket_name = "arn:aws-us-gov:s3:::some_bucket_name/some_folder/"
    
    get_last_modified = lambda obj: int(obj['LastModified'].strftime('%s'))

    s3 = boto3.client('s3')
    objs = s3.list_objects_v2(Bucket=bucket_name)['Contents']
    last_added = [obj['Key'] for obj in sorted(objs, key=get_last_modified)][0]

...虽然事情看起来正确,但我不断收到错误:

"errorMessage": "Parameter validation failed:\nInvalid bucket name \"arn:aws-us-gov:s3:::some_bucket_name/some_folder/\": Bucket name must match the regex \"^[a-zA-Z0-9.\\-_]{1,255}$\" or be an ARN matching the regex \"^arn:(aws).*:(s3|s3-object-lambda):[a-z\\-0-9]*:[0-9]{12}:accesspoint[/:][a-zA-Z0-9\\-.]{1,63}$|^arn:(aws).*:s3-outposts:[a-z\\-0-9]+:[0-9]{12}:outpost[/:][a-zA-Z0-9\\-]{1,63}[/:]accesspoint[/:][a-zA-Z0-9\\-]{1,63}$\"",

我在存储桶名称中缺少什么?我从控制台复制了 ARN,但似乎仍然无法产生预期的结果。我不是 RegEx 专家,所以我很难辨别 arn 中可能缺少什么。为了测试,我用一些随机名称替换了存储桶名称,并得到了存储桶不存在的错误;正如预期的那样。我有点困惑是什么问题。任何帮助将不胜感激。

【问题讨论】:

  • 您不需要输入完整的 ARN,只需在您的情况下输入 some_bucket_name。请参阅文档:boto3.amazonaws.com/v1/documentation/api/latest/reference/…
  • 您要使用的存储桶名称是“some_bucket_name”,而不是存储桶的完整 ARN。另外,如果不使用分页器,最多只能获取桶中的前 1000 个对象。
  • 我看到了 bucket_name 的问题:我试图使用文件位置的完整路径,而不仅仅是实际的存储桶名称。我将不得不进一步挖掘如何添加路径的其余部分。

标签: python amazon-web-services amazon-s3 aws-lambda boto3


【解决方案1】:

好的。我已经解决了“问题”,现在有了我需要的东西。

import boto3
    
bucket_name = "actual_bucket_name"
prefix = "path/to/files/"
    
get_last_modified = lambda obj: int(obj['LastModified'].strftime('%s'))

s3 = boto3.client('s3')
objs = s3.list_objects_v2(Bucket=bucket_name, Prefix=prefix, Delimiter='/' ['Contents']
last_added = [obj['Key'] for obj in sorted(objs, key=get_last_modified)][0]

感谢您的指点。我正在阅读文档,但是,我们知道在盯着文字墙一段时间后会怎样。 “问题”是我没有深刻理解的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    相关资源
    最近更新 更多