You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Python删除Google Cloud Storage指定路径下的所有内容

用Python删除Google Cloud Storage指定路径下的所有内容

Hey Arjun, 这里有几种实用的方法可以帮你清空gs://test/one/路径下的所有内容(包括子文件夹和文件),基于官方的google-cloud-storage库来实现:

前置准备

首先确保你已经安装了GCS的Python客户端库:

pip install google-cloud-storage

如果是本地运行,需要配置认证:设置环境变量GOOGLE_APPLICATION_CREDENTIALS指向你的服务账号密钥文件路径;如果是在GCP托管环境(比如Cloud Function、Compute Engine)运行,默认会自动使用服务账号权限,无需额外配置。

方法一:批量删除指定前缀下的所有Blob

GCS中没有真正的“文件夹”概念,所有文件都是带有路径前缀的Blob。我们可以通过匹配前缀来获取目标路径下的所有Blob,然后批量删除:

from google.cloud import storage
from google.api_core.exceptions import NotFound, PermissionDenied

def clear_gcs_directory(gs_path):
    try:
        # 验证路径格式
        if not gs_path.startswith("gs://"):
            raise ValueError("请提供正确的GCS路径,格式应为gs://bucket-name/path/")
        
        # 解析存储桶名称和路径前缀
        path_parts = gs_path.lstrip("gs://").split("/")
        bucket_name = path_parts[0]
        # 拼接前缀,确保以/结尾,避免误匹配类似路径
        prefix = "/".join(path_parts[1:])
        if not prefix.endswith("/"):
            prefix += "/"

        # 初始化客户端和存储桶对象
        storage_client = storage.Client()
        bucket = storage_client.bucket(bucket_name)

        # 检查存储桶是否存在
        if not bucket.exists():
            raise NotFound(f"存储桶 {bucket_name} 不存在")
        
        # 获取所有匹配前缀的Blob(包括子路径下的文件)
        blobs_to_delete = bucket.list_blobs(prefix=prefix)
        
        # 批量删除Blob,效率远高于单个删除
        bucket.delete_blobs(blobs_to_delete)
        print(f"✅ 已成功清空路径 {gs_path} 下的所有内容")
    
    except ValueError as ve:
        print(f"❌ 参数错误:{ve}")
    except NotFound as nfe:
        print(f"❌ 资源不存在:{nfe}")
    except PermissionDenied as pde:
        print(f"❌ 权限不足:{pde}")
    except Exception as e:
        print(f"❌ 删除失败:{str(e)}")

# 使用示例
GS_PATH = "gs://test/one/"
clear_gcs_directory(GS_PATH)

关键说明

  • 前缀匹配逻辑:通过prefix参数可以精准定位目标路径下的所有Blob,包括子文件夹(实际是带更长前缀的Blob)
  • 批量删除优势delete_blobs()方法会批量处理删除请求,比循环调用单个Blob的delete()方法效率更高,尤其适合内容较多的场景
  • 异常处理:代码中加入了常见异常的捕获和提示,方便你排查问题(比如权限不足、存储桶不存在等)

内容的提问来源于stack exchange,提问作者m mallikarjuna

火山引擎 最新活动