web-dev-qa-db-fra.com

Google Cloud Storage: comment supprimer un dossier (récursivement) dans Python

J'essaie de supprimer un dossier dans GCS et tout son contenu (y compris les sous-répertoires) avec sa bibliothèque Python. De plus, je comprends que GCS n'a pas vraiment de dossiers (mais préfixe?) Mais je Je me demande comment je peux faire ça?

J'ai testé ce code:

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/')

Le premier appel à delete_blob a fonctionné mais pas le 2e. Que puis-je supprimer un dossier récursivement?

9
kee

Pour supprimer tout ce qui commence par un certain préfixe (par exemple, un nom de répertoire), vous pouvez parcourir une liste:

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

Notez que pour les très grands compartiments contenant des millions ou des milliards d'objets, cela peut ne pas être un processus très rapide. Pour cela, vous voudrez faire quelque chose de plus complexe, comme la suppression de plusieurs threads ou l'utilisation de règles de configuration du cycle de vie pour organiser la suppression des objets.

10
Brandon Yarbrough