统计目录中的对象数量和大小 用户基本信息 accesskey "YourAccessKey" secretkey "YourSecretKey" endpoint "YourEndpoint" bucketname "YourBucketName" foldername "YourFolderName" 统计结果 数据结构 Count: 文件数量 Size: 容量大小,单位bytes StorageTypeStandard: 标准存储 StorageTypeIa: 低频存储 StorageTypeGlacier: 归档存储 result { 'Count': 0, 'Size': 0, 'StorageTypeStandard': { 'Count': 0, 'Size': 0, }, 'StorageTypeIa': { 'Count': 0, 'Size': 0, }, 'StorageTypeGlacier': { 'Count': 0, 'Size': 0, } } def gets3client(): """ 获取s3 client """ session boto3.session.Session(accesskey, secretkey) s3client session.client("s3", endpointurlendpoint) return s3client def folderstatistics(bucketname, foldername): """ 文件夹存储类型情况统计 :param bucketname:存储桶名称 :param foldername:文件夹名称, 完整文件夹名, 比如: 'abc/def/ghi/jkl/' :return: None """ params { 'Bucket': bucketname, 'Prefix': foldername, } 辅助函数 更新统计结果 def updateresult(result, versions): for v in versions: 跳过文件目录本体 if v['Key'] params['Prefix']: continue size v['Size'] storage v['StorageClass'] result['Count'] + 1 result['Size'] + size if storage 'STANDARD': storage 'StorageTypeStandard' elif storage 'STANDARDIA': storage 'StorageTypeIa' elif storage 'GLACIER': storage 'StorageTypeGlacier' else: continue result[storage]['Count'] + 1 result[storage]['Size'] + size s3client gets3client() resp s3client.listobjectversions(params) updateresult(result, resp.get('Versions', []))