Shamshad Alam
Shamshad Alam

Reputation: 1874

Deleting all blobs inside a path prefix using google cloud storage API

I am using google cloud storage python API. I came across a situation where I need to delete a folder that might have hundred of files using API. Is there an efficient way to do it without making recursive and multiple delete call?

One solution that I have is to list all blob objects in the bucket with given path prefix and delete them one by one.

The other solution is to use gsutil:

$ gsutil rm -R gs://bucket/path

Upvotes: 3

Views: 4992

Answers (2)

Suyash Rathi
Suyash Rathi

Reputation: 214

from google.cloud import storage
    
def deleteStorageFolder(bucketName, folder):
        """
        This function deletes from GCP Storage

        :param bucketName: The bucket name in which the file is to be placed
        :param folder: Folder name to be deleted
        :return: returns nothing
        """
        cloudStorageClient = storage.Client()
        bucket = cloudStorageClient.bucket(bucketName)
        try:
            bucket.delete_blobs(blobs=list(bucket.list_blobs(prefix=folder)))
        except Exception as e:
            print str(e.message)

In this case folder = "path"

Upvotes: 3

Vito
Vito

Reputation: 1698

Try something like this:

bucket = storage.Client().bucket(bucket_name)
blobs = bucket.list_blobs()
while True:
    blob = blobs.next()
    if not blob: break
    if blob.name.startswith('/path'): blob.delete()

And if you want to delete the contents of a bucket instead of a folder within a bucket you can do it in a single method call as such:

bucket = storage.Client().bucket(bucket_name)
bucket.delete_blobs(bucket.list_blobs())

Upvotes: 4

Related Questions