繁体   English   中英

从 GOOGLE CLOUD STORAGE BUCKET 下载多个文件

[英]Download multiple files from GOOGLE CLOUD STORAGE BUCKET

有谁知道如何在 GCS 存储桶中提取以“测试”开头的文件的所有数据? 我曾尝试使用 glob.glob 方法和通配符glob.glob('*.csv')但没有奏效。 任何帮助将非常感激。

from google.cloud import storage

def download_blob(bucket_name, source_blob_name, destination_file_name):
    
  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'
  storage_client = storage.Client()
  bucket = storage_client.bucket(bucket_name)
  blob = bucket.blob(source_blob_name)
  blob.download_to_filename(destination_file_name)

GCS没有目录的概念,所以“folder1/folder2/Test_data_01052022104530.csv”不是一个名为“Test_data_01052022104530.csv”的文件,而是一个名为“folder1/folder2/Test_data_01052022104530.csv”的对象。 因此,您不想查找以“Test”开头的文件,而是查找名称中任何位置带有字符串“/Test”的对象(或者以“Test”开头的根目录)。

GCS 不提供执行此操作的工具,您必须列出对象并进行筛选才能执行此操作。 例如:

  client = storage.Client()
  for blob in client.list_blobs(BUCKET):
    if "/Test" in blob.name or blob.name.startswith("Test"):
      blob.download_to_filename(somewhere)

对于大型存储桶,这可能会很慢,尤其是在匹配的文件很少的情况下。 一些加快速度的方法:

  • 如果您的数据的结构使得您拥有少量目录,并且一小部分文件将匹配:使用 list_blobs 的前缀和定界符选项“遍历树”可能会更快,然后为每个“目录”使用前缀directory+"/Test"执行 list_blobs 以仅列出匹配的对象。

  • 并行列出或下载

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM