Python 批量删除文件夹
引导式阅读
Python
Python 批量删除文件夹
作者
C***
上架时间
2023-11-14 02:56:26

功能介绍

本示例介绍了如何使用华为云 Python SDK 的批量删除接口批量删除桶中具有相同前缀的所有对象。

版本说明

本示例配套的 SDK 版本为 3.21.8

准备工作

  1. 使用 pip install esdk-obs-python 安装 OBS Python SDK,或通过 华为云OBS开发工具包(SDK) 获取源码包安装。
  2. 要使用华为云 Python SDK,您需要拥有华为云账号以及该账号对应的 Access Key(AK)和 Secret Access Key(SK)。请参考OBS服务环境搭建
  3. 获取您桶所在的终端节点 OBS 终端节点列表
  4. 华为云 Python SDK 支持 Python 2Python 3

代码示例

在脚本中填入相关信息后即可运行,请填写以下字段:

变量名 变量含义
AK Access Key
SK Secret Access Key
ENDPOINT 终端节点
bucket_name 需要删除对象所在的桶名
remote_prefix 需要删除对象的前缀名
# 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对象存储服务