代码示例
在脚本中填入相关信息后即可运行,请填写以下字段:
变量名 |
变量含义 |
AK |
Access Key |
SK |
Secret Access Key |
ENDPOINT |
终端节点 |
bucket_name |
需要删除对象所在的桶名 |
remote_prefix |
需要删除对象的前缀名 |
Copied!
from obs import DeleteObjectsRequest, Object, ObsClient
import os
AK = os.environ["HUAWEICLOUD_SDK_AK"]
SK = os.environ["HUAWEICLOUD_SDK_SK"]
ENDPOINT = "http://your-endpoint"
obsClient = ObsClient(access_key_id=AK, secret_access_key=SK, server=ENDPOINT)
bucket_name = "you-bucket-name"
remote_prefix = "remote_prefix"
page = 1
failed_list = []
total_delete_num = 0
object_list = obsClient.listObjects(bucket_name, prefix=remote_prefix, encoding_type="url")
while True:
print("Start to delete page %s" % page)
page += 1
need_to_delete_objects = [Object(key=i["key"], versionId=None) for i in object_list.body["contents"]]
resp = obsClient.deleteObjects(bucket_name,
DeleteObjectsRequest(False, need_to_delete_objects, encoding_type="url"))
for delete in resp.body.deleted:
print("Successfully deleted %s " % delete.key)
total_delete_num += 1
if resp.body.error:
for err in resp.body.error:
print("Failed to delete %s" % err.key)
failed_list.append(err.key)
if not object_list.body["is_truncated"]:
break
object_list = obsClient.listObjects(bucket_name, prefix=remote_prefix,
encoding_type="url", marker=object_list.body["next_marker"])
print("Total deleted %s objects" % total_delete_num)
for i in failed_list:
print("Failed to delete %s, please try again" % i)
功能介绍
本示例介绍了如何使用华为云 Python SDK 的批量删除接口批量删除桶中具有相同前缀的所有对象。
版本说明
本示例配套的 SDK 版本为 3.21.8
准备工作
pip install esdk-obs-python
安装 OBS Python SDK,或通过 华为云OBS开发工具包(SDK) 获取源码包安装。代码示例
在脚本中填入相关信息后即可运行,请填写以下字段:
# coding:utf-8 from obs import DeleteObjectsRequest, Object, ObsClient import os # 认证用的ak和sk直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; # 本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 AK = os.environ["HUAWEICLOUD_SDK_AK"] SK = os.environ["HUAWEICLOUD_SDK_SK"] ENDPOINT = "http://your-endpoint" obsClient = ObsClient(access_key_id=AK, secret_access_key=SK, server=ENDPOINT) bucket_name = "you-bucket-name" remote_prefix = "remote_prefix" page = 1 failed_list = [] total_delete_num = 0 object_list = obsClient.listObjects(bucket_name, prefix=remote_prefix, encoding_type="url") while True: print("Start to delete page %s" % page) page += 1 need_to_delete_objects = [Object(key=i["key"], versionId=None) for i in object_list.body["contents"]] resp = obsClient.deleteObjects(bucket_name, DeleteObjectsRequest(False, need_to_delete_objects, encoding_type="url")) for delete in resp.body.deleted: print("Successfully deleted %s " % delete.key) total_delete_num += 1 if resp.body.error: for err in resp.body.error: print("Failed to delete %s" % err.key) failed_list.append(err.key) if not object_list.body["is_truncated"]: break # 使用上次返回的 next_marker 作为下次列举的 marker object_list = obsClient.listObjects(bucket_name, prefix=remote_prefix, encoding_type="url", marker=object_list.body["next_marker"]) print("Total deleted %s objects" % total_delete_num) for i in failed_list: print("Failed to delete %s, please try again" % i)
备注
对象存储并没有文件夹的概念,所有对象均为同一层级。为了方便查看,OBS 使用 / 作为分隔符,将具有相同前缀的对象划分至同一文件夹展示。
参考
更多信息请参考OBS对象存储服务