如何从GCS存储桶下载所有以Test开头的文件?
从GCS存储桶下载所有以'Test'开头的文件方法
glob.glob仅适用于本地文件系统的文件匹配,无法直接作用于Google Cloud Storage(GCS)的云端存储桶,你需要借助GCS客户端库的API来筛选并下载目标文件。
以下是实现批量下载的完整代码:
from google.cloud import storage import os def download_all_test_files(bucket_name, gcs_prefix, local_dir): # 初始化GCS客户端 storage_client = storage.Client() bucket = storage_client.bucket(bucket_name) # 确保本地目录存在 os.makedirs(local_dir, exist_ok=True) # 列出所有以指定前缀开头的Blob(前缀包含路径和'Test'开头) blobs = bucket.list_blobs(prefix=gcs_prefix) for blob in blobs: # 跳过目录(GCS中文件夹是带后缀/的Blob) if blob.name.endswith('/'): continue # 构造本地文件路径,保留原文件名 local_file_path = os.path.join(local_dir, os.path.basename(blob.name)) # 下载文件 blob.download_to_filename(local_file_path) print(f"已下载文件: {blob.name} -> {local_file_path}") # 使用示例 if __name__ == "__main__": BUCKET_NAME = 'gcs-bucket' # 指定GCS中的路径前缀,对应目标路径+Test开头 GCS_PREFIX = 'folder1/folder2/Test' # 本地保存目录 LOCAL_DIR = r'C:\Users\path\path1\path2\path3\path4' download_all_test_files(BUCKET_NAME, GCS_PREFIX, LOCAL_DIR)
代码说明
bucket.list_blobs(prefix=gcs_prefix):通过指定folder1/folder2/Test作为前缀,精准筛选该路径下所有以'Test'开头的文件。os.makedirs(local_dir, exist_ok=True):自动创建本地保存目录,避免因目录不存在报错。- 跳过目录条目:GCS中的文件夹本质是带
/后缀的特殊Blob,遍历过程中需要跳过这些条目,只下载实际文件。 - 保留原文件名:通过
os.path.basename(blob.name)提取GCS文件的原始名称,确保本地文件命名与云端一致。
如果需要保留单个文件下载功能,建议将原代码中的硬编码参数改为外部传入,提升灵活性:
from google.cloud import storage def download_blob(bucket_name, source_blob_name, destination_file_name): storage_client = storage.Client() bucket = storage_client.bucket(bucket_name) blob = bucket.blob(source_blob_name) blob.download_to_filename(destination_file_name) print(f"已下载单个文件: {source_blob_name} -> {destination_file_name}") # 使用示例 download_blob( bucket_name='gcs-bucket', source_blob_name='folder1/folder2/Test_data_01052022104530.csv', destination_file_name=r'C:\Users\path\path1\path2\path3\path4\Test.csv' )
内容的提问来源于stack exchange,提问作者Mizanur Choudhury
相关产品推荐
相关产品推荐

