web-dev-qa-db-ja.com

Google Cloud Storage:Pythonでフォルダを(再帰的に)削除する方法

GCSのフォルダとそのすべてのコンテンツ(サブディレクトリを含む)をPythonライブラリ)で削除しようとしています。また、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への最初の呼び出しは機能しましたが、2番目の呼び出しは機能しませんでした。フォルダーを再帰的に削除するにはどうすればよいですか?

9
kee

特定のプレフィックス(たとえば、ディレクトリ名)で始まるすべてを削除するには、リストを反復処理します。

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

数百万または数十億のオブジェクトを持つ非常に大きなバケットの場合、これは非常に高速なプロセスではない可能性があることに注意してください。そのためには、複数のスレッドでの削除や、ライフサイクル構成ルールを使用したオブジェクトの削除の調整など、より複雑な処理を行う必要があります。

10