Remove azure blob storage folders with SDK

Jason Le 96 Reputation points Microsoft Employee
2021-07-07T23:45:34.583+00:00

112763-image.png

I am using sdk Azure.Storage.Blobs. I can delete blobs but end up with lots of empty folders. How can I remove these folders programmatically? I can't find way to do it in sdk. Thanks

Azure Blob Storage
Azure Blob Storage
An Azure service that stores unstructured data in the cloud as blobs.
3,141 questions
{count} votes

1 answer

Sort by: Most helpful
  1. Sumarigo-MSFT 47,526 Reputation points Microsoft Employee
    2021-07-08T10:24:04.743+00:00

    @Jason Le In Azure Blob Storage, as such a folder doesn't exist. It is just a prefix for a blob's name. For example, if you see a folder named images and it contains a blob called myfile.png, then essentially the blob's name is images/myfile.png. Because the folders don't really exist (they are virtual), you can't delete the folder directly.

    What you need to do is delete all blobs individually in that folder (or in other words delete the blobs whose name begins with that virtual folder name/path. Once you have deleted all the blobs, then that folder automatically goes away.

    In order to accomplish this, first you would need to fetch all blobs whose name starts with the virtual folder path. For that you will use list_blobs method and specify the virtual folder path in prefix parameter. This will give you a list of blobs starting with that prefix. Once you have that list, you will delete the blobs one by one.

    • You can easily delete a folder including all its contents in Storage Explorer. Otherwise you will need to fetch a list of everything you wish to delete and run those through a loop to delete. For more programmatic solutions please check this thread.
    • Additional information and workaround : Use list_blobs(name_starts_with=folder_name) and delete_blob()

    Complete code:
    blob_service_client = BlobServiceClient.from_connection_string(conn_str=CONN_STR)
    blob_client = blob_service_client.get_container_client(AZURE_BLOBSTORE_CONTAINER)
    [blob_client.delete_blob(blob.name)
    for blob in blob_client.list_blobs(name_starts_with=FOLDER_NAME)]

    • : You cannot delete a non-empty folder in Azure blobs, but you can achieve it if you delete the files inside the sub-folders first. The below work around will start deleting it from the files to the parent folder. from azure.storage.blob import BlockBlobService
      blob_client = BlockBlobService(account_name='', account_key='')
      containername = 'XXX'
      foldername = 'XXX' def delete_folder(containername, foldername):
      folders = [blob.name for blob in blob_client.list_blobs(containername, prefix=foldername)]
      folders.sort(reverse=True, key=len)
      if len(folders) > 0:
      for folder in folders:
      blob_client.delete_blob(containername, folder)
      print("deleted folder",folder)

    Hope this helps!
    Kindly let us know if the above helps or you need further assistance on this issue.

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    Please do not forget to "Accept the answer” and “up-vote” wherever the information provided helps you, this can be beneficial to other community members.

    0 comments No comments

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.