Google云端存储:如何在Python中(递归)删除文件夹

时间:2018-10-13 05:05:48

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

我正在尝试使用其Python库删除GCS中的文件夹及其所有内容(包括子目录)。我也知道GCS确实没有文件夹(但有前缀吗?),但我想知道如何做到这一点?

我测试了这段代码:

from google.cloud import storage

def delete_blob(bucket_name, blob_name):
    """Deletes a blob from the bucket."""
    storage_client = storage.Client()
    bucket = storage_client.get_bucket(bucket_name)
    blob = bucket.blob(blob_name)

    blob.delete()

delete_blob('mybucket', 'top_folder/sub_folder/test.txt')
delete_blob('mybucket', 'top_folder/sub_folder/')

对delete_blob的第一次调用有效,但对第二个则无效。我可以递归删除文件夹吗?

1 个答案:

答案 0 :(得分:8)

要删除所有以特定前缀(例如目录名)开头的内容,可以遍历列表:

storage_client = storage.Client()
bucket = storage_client.get_bucket(bucket_name)
blobs = bucket.list_blobs(prefix='some/directory')
for blob in blobs:
  blob.delete()

请注意,对于具有数百万或数十亿个对象的非常大的存储桶,这可能不是一个非常快速的过程。为此,您需要做一些更复杂的事情,例如在多个线程中删除或使用生命周期配置规则来安排要删除的对象。