2

在 google.cloud.storage 和 list_blobs 的帮助下,我可以从特定存储桶中获取文件列表。但我想过滤(名称* .ext)存储桶中的确切文件。我无法找到确切的解决方案。

例如:buket=data,prefix_folder_name=sales,在前缀文件夹中我有带有元数据的发票列表。我想获取具体的发票及其元数据(名称*.csv 和名称。*.meta)。此外,如果我循环特定文件夹的整个 all_blob 以获取所选文件,那么它将是大量数据并且可能会影响性能。

如果有人帮助我解决这个问题,那就太好了。

bucket = gcs_client.get_bucket(buket)
all_blobs = bucket.list_blobs(prefix=prefix_folder_name)
for blob in all_blobs: 
  print(blob.name)
4

4 回答 4

4

根据google-cloud-storage 文档,Blob 是具有name属性的对象,因此您可以按此属性过滤它们。

from google.cloud import storage

# storage_client = gcs client
storage_client = storage.Client()

# bucket_name = "your-bucket-name"
# Note: Client.list_blobs requires at least package version 1.17.0.
blobs = storage_client.list_blobs(bucket_name)

# filter_dir = "filter-string"
[blob.name for blob in blobs if filter_dir in blob.name ]
于 2020-11-26T13:07:14.430 回答
2

它不允许您进行过滤,但您可以使用 fields 参数仅返回对象的名称,从而限制返回的数据量并使其易于过滤。

于 2020-07-08T23:55:03.800 回答
0

您可以过滤前缀,但要更具体地过滤(例如,以给定名称扩展名结尾的对象),您必须实现客户端过滤逻辑。这就是gsutil当您执行以下命令时所做的:

gsutil ls gs://your-bucket/abc*.txt
于 2020-07-08T18:48:55.233 回答
0

name考虑过滤器和文件,您可以使用以下内容.ext

all_blobs = bucket.list_blobs()    
fileList = [file.name for file in all_blobs if '.ext' in file.name and 'name' in file.name]

for file in fileList: 
  print(file)

name将是文件名过滤器,.ext也是您的扩展过滤器。

于 2021-04-30T11:59:23.080 回答