Google云端存储:Python API使用通配符获取Blob信息

时间:2019-07-17 18:25:50

标签: python google-cloud-platform google-cloud-storage

我正在尝试从存储桶中获取Blob信息,但我想在Blob名称中使用通配符。考虑一下我的水桶

$ gsutil ls gs://myBucket/myPath/
gs://myBucket/myPath/
gs://myBucket/myPath/ranOn=2018-12-11/
gs://myBucket/myPath/ranOn=2018-12-12/
gs://myBucket/myPath/ranOn=2018-12-13/
gs://myBucket/myPath/ranOn=2018-12-14/
gs://myBucket/myPath/ranOn=2018-12-15/
gs://myBucket/myPath/ranOn=2019-02-18/
gs://myBucket/myPath/ranOn=2019-02-19/
gs://myBucket/myPath/ranOn=2019-02-20/
gs://myBucket/myPath/ranOn=2019-02-21/

现在可以从命令行执行

$ gsutil ls gs://myBucket/myPath/ranOn=2018*
gs://myBucket/myPath/
gs://myBucket/myPath/ranOn=2018-12-11/
gs://myBucket/myPath/ranOn=2018-12-12/
gs://myBucket/myPath/ranOn=2018-12-13/
gs://myBucket/myPath/ranOn=2018-12-14/
gs://myBucket/myPath/ranOn=2018-12-15/

因此我可以对大小做相同的操作

$ gsutil du -sh gs://myBucket/myPath/ranOn=2018*
2.7 G

现在,我想对python api做同样的事情。这是我尝试过的

from google.cloud import storage

storage_client = storage.Client()
bucket = storage_client.get_bucket('myBucket')
blob = bucket.get_blob('myPath/ranOn=2018*')
print('Size: {} bytes'.format(blob.size))
Size: None bytes

为什么这不起作用?如何在带有python api的blob路径中使用通配符?

1 个答案:

答案 0 :(得分:2)

不幸的是,get_blob仅用于获取单个文件,而不是多个文件。

您需要遍历所有与该前缀匹配的文件,并对它们的大小求和以获得总大小。

blobs = bucket.list_blobs(prefix="myPath/ranOn=2018")

total = sum([blob.size for blob in blobs])