You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 02:55:23