如何通过Python Lambda函数统计S3存储桶指定文件夹的文件数量
可以通过Python Lambda函数获取S3特定文件夹的对象数量
当然可以,借助AWS SDK for Python(boto3)就能在Lambda函数里实现这个需求。需要注意的是,S3本身没有真正的文件夹结构,所谓的“文件夹”其实是对象键的前缀,核心思路就是通过前缀过滤目标对象,再统计数量。
前提条件
确保Lambda的执行角色拥有s3:ListBucket权限,示例权限策略如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::your-bucket-name" } ] }
示例Lambda代码
import boto3 def lambda_handler(event, context): # 初始化S3客户端 s3_client = boto3.client('s3') # 配置目标桶和文件夹前缀 target_bucket = 'your-bucket-name' folder_prefix = 'docs/reports/2024/' # 必须以斜杠结尾,精准匹配目标文件夹 object_count = 0 # 使用分页器处理大量对象(S3单次最多返回1000个对象) paginator = s3_client.get_paginator('list_objects_v2') for page in paginator.paginate(Bucket=target_bucket, Prefix=folder_prefix, Delimiter='/'): # 统计当前页的对象数量 if 'Contents' in page: object_count += len(page['Contents']) return { 'statusCode': 200, 'body': f"目标文件夹内共有 {object_count} 个对象" }
关键细节说明
- 前缀的斜杠:
folder_prefix必须以/结尾,否则会匹配所有以该字符串开头的键(比如docs/reports/2024和docs/reports/2024-old),导致统计范围错误。 - 分页处理:当文件夹内对象超过1000个时,boto3的分页器会自动处理分页请求,无需手动管理分页标记。
- 排除子文件夹:如果目标文件夹下有子文件夹,设置
Delimiter='/'后,Contents里只会包含当前文件夹的对象,子文件夹会被归类到CommonPrefixes中,不会被统计。
内容的提问来源于stack exchange,提问作者Faris Ashhab
相关产品推荐
相关产品推荐

