如何使用Python获取IBM Cloud Object Storage Bucket内的所有文件
错误原因
你调用的cos.Object()是用于操作单个指定对象的接口,要求同时传入存储桶名称和对象键(文件路径)两个必填参数,你仅传入了存储桶名称,缺少对象键参数,因此触发参数缺失报错。同时该接口本身也不支持批量拉取存储桶下全部对象的需求。
正确实现代码
首先确保你已经完成了COS客户端的初始化,完整的实现逻辑如下:
import ibm_boto3 from ibm_botocore.client import Config, ClientError # 先完成COS客户端初始化(替换为你自己的配置参数) cos = ibm_boto3.resource( 's3', ibm_api_key_id='你的IBM_COS_API_KEY', ibm_service_instance_id='你的COS服务实例ID', config=Config(signature_version='oauth'), endpoint_url='你的COS区域端点地址' ) my_bucket_name = "你的存储桶名称" # 正确写法:先获取存储桶实例,再拉取所有对象 bucket = cos.Bucket(my_bucket_name) all_files = bucket.objects.all() # 遍历输出所有对象信息示例 for obj in all_files: print(f"文件名:{obj.key},文件大小:{obj.size}字节,最后修改时间:{obj.last_modified}")
补充说明
- 如果存储桶内对象数量超过1000个,
bucket.objects.all()会自动处理分页拉取,不需要手动处理分页逻辑 - 如果需要过滤指定前缀的对象,可以使用
bucket.objects.filter(Prefix="指定前缀路径")方法 - 操作时建议添加异常捕获逻辑,处理权限不足、存储桶不存在等常见异常,示例如下:
try: bucket = cos.Bucket(my_bucket_name) all_files = list(bucket.objects.all()) except ClientError as e: error_code = e.response['Error']['Code'] if error_code == 'NoSuchBucket': print("指定存储桶不存在") elif error_code == 'AccessDenied': print("没有该存储桶的访问权限") else: print(f"操作出错:{e}")
内容的提问来源于stack exchange,提问作者sysOut
相关产品推荐
相关产品推荐

