繁体   English   中英

如何使用 Python 列出 S3 中最后修改的文件

[英]How to list last modified file in S3 using Python

我正在尝试使用以下方法获取 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 中可能缺少什么。 为了测试,我用一些随机名称替换了存储桶名称,但得到了一个错误,指出该存储桶不存在; 正如预期的那样。 我有点困惑是什么问题。 任何帮助将不胜感激。

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

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]

谢谢指点。 我正在阅读文档,但是,我们知道在盯着文字墙看了一会儿之后会怎样。 “问题”是我没有敏锐地理解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM