如何用Python将GCS Bucket中artifacts目录下的文件夹下载到本地?
解决GCS指定文件夹下载问题
问题分析
你的代码存在几个关键问题:
- 未定义
bucket_name变量,需要指定为实际桶名test_bucket prefix参数设置错误,目标artifacts目录完整路径是11100/e324vn241c9e4c4/artifacts/,仅用artifacts会匹配根目录下所有以该词开头的文件- 未提前创建本地目录,直接下载带路径的文件会因目录不存在报错
- 未过滤目标文件夹(confusion_matrix、model、roc_auc_plot),会下载
artifacts下所有文件
修改后的代码
from google.cloud import storage import os # 初始化客户端 storage_client = storage.Client.from_service_account_json('service_account.json') bucket = storage_client.get_bucket('test_bucket') # 目标文件夹列表 target_folders = ['confusion_matrix', 'model', 'roc_auc_plot'] # 完整的前缀路径 base_prefix = '11100/e324vn241c9e4c4/artifacts/' for folder in target_folders: # 拼接每个目标文件夹的前缀 folder_prefix = f"{base_prefix}{folder}/" # 获取该文件夹下所有文件 blobs = bucket.list_blobs(prefix=folder_prefix) for blob in blobs: # 跳过文件夹本身(GCS中文件夹是后缀为/的blob) if blob.name.endswith('/'): continue # 构造本地保存路径 local_path = f"./{blob.name}" # 创建文件所在的本地目录 os.makedirs(os.path.dirname(local_path), exist_ok=True) print(f"Downloading file [{blob.name}]") blob.download_to_filename(local_path)
关键修改说明
- 明确指定了桶名
test_bucket,修复未定义变量问题 - 使用完整前缀定位到目标
artifacts目录,确保只扫描指定路径下的文件 - 添加
os.makedirs创建本地目录,避免路径不存在报错 - 只遍历目标文件夹列表中的内容,精准下载所需文件
内容的提问来源于stack exchange,提问作者merkle
相关产品推荐
相关产品推荐

