如何使用 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]
谢谢指点。我正在阅读文档,但是,我们知道在盯着文字墙看了一会儿之后会怎样。 “问题”是我没有敏锐地理解。
我正在尝试使用以下方法获取 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]
谢谢指点。我正在阅读文档,但是,我们知道在盯着文字墙看了一会儿之后会怎样。 “问题”是我没有敏锐地理解。