0

我有一个临时文件夹,我想在 gcp 存储桶中删除它我想删除它的所有内容,我想到的是我可以将此临时文件夹的路径作为前缀传递并列出其中的所有 blob 并删除每个blob,但我怀疑它会在不删除文件夹本身的情况下删除其中的 blob,对吗?目标是在 folder1/没有临时文件夹的情况下找到空文件夹,但是当我尝试时发现意外行为,我发现包含此临时文件夹的文件夹已被删除!例如,如果我们有folder1/tempfolder/file1.csv并且folder1/tempfolder/file2.csv我发现在应用我的更改后删除了 folder1,那么应用的更改如下:

delete_folder_on_uri(storage_client,"gs://bucketname/folder1/tempfolder/")
def delete_folder_on_uri(storage_client, folder_gcs_uri):
    bucket_uri = BucketUri(folder_gcs_uri)
    delete_folder(storage_client, bucket_uri.name, bucket_uri.key)

def delete_folder(storage_client, bucket_name, folder):
    bucket = storage_client.get_bucket(bucket_name)
    blobs = bucket.list_blobs(prefix=folder)

    for blob in blobs:
        
        blob.delete()

PS:BucketUri是一个类,其中bucket_uri.name检索存储桶名称并bucket_uri.key检索路径folder1/tempfolder/

4

1 回答 1

1

GCS中根本没有这样的东西folder。“文件夹” - 只是对象(或文件)前缀的人类友好表示。所以完整的路径看起来像gs://bucket-name/prefix/another-prefix/object-name。由于没有文件夹(在本体上) - 因此 - 没有什么可删除的。

因此,您可能需要删除给定存储桶中以某个前缀开头的所有对象(文件)。

我认为你做的一切都是正确的。

这是一个旧示例(类似于您的代码) -如何从 Python 中删除 GCS 文件夹?

这是一个 API 描述 - Blobs / Objects - 您可能想检查该delete方法。

于 2022-01-19T13:30:27.993 回答