我需要使用 python 在 google clous 存储中的文件夹内创建一个文件夹。 我知道如何创建一个文件夹:
bucket_name = 'data_bucket_10_07'
# create a new bucket
bucket = storage_client.bucket(bucket_name)
bucket.storage_class = 'COLDLINE' # Archive | Nearline | Standard
bucket.location = 'US' # Taiwan
bucket = storage_client.create_bucket(bucket) # returns Bucket object
my_bucket = storage_client.get_bucket(bucket_name)
当我尝试将 bucket_name = 'data_bucket_10_07'
更改为 bucket_name = 'data_bucket_10_07/data_bucket_10_07_1'
时出现错误:
google.api_core.exceptions.BadRequest: 400 POST https://storage.googleapis.com/storage/v1/b?project=effective-forge-317205&prettyPrint=false: Invalid bucket name: 'data_bucket_10_07/data_bucket_10_07_1'
我应该如何解决我的问题?
答案 0 :(得分:1)
正如约翰在评论中提到的,在一个桶里放一个桶在本体论上可能是不可能的。
有关文档的详细信息,请参阅 Bucket naming guidelines。
简而言之:
一个全局命名空间中只有一层bucket(因此bucket名称是全局唯一的)。存储桶名称以外的所有内容 - 属于对象名称。
例如,您可以创建一个存储桶(假设名称尚未使用),例如 data_bucket_10_07
。在这种情况下,它可能看起来像 gs://data_bucket_10_07
然后,您可能希望以这种方式存储一些对象(文件),使其看起来像一个目录层次结构,因此,假设有 /01/data.csv
对象和 /02/data.csv
对象。 01
和 02
大概应该在语义上反映某个日期。
那些 /01/
和 /02/
元素 - 本质上是对象名称的开始部分(或者换句话说就是对象的前缀)。
到目前为止,存储桶名称是 gs://data_bucket_10_07
对象名称为 /01/data.csv
和 /02/data.csv
我建议查看 Object naming guidelines 文档,其中对这些想法的描述要好得多,我可以用一句话来描述。
答案 1 :(得分:0)
其他评论在详细说明嵌套存储桶是不可能的方面做得很好,但他们只是在短时间内提出以下建议:GCS 不依赖文件夹,仅在 Web UI 上呈现具有层次结构的内容以方便使用.
<块引用>Cloud Storage 使用平面命名空间,这意味着文件夹实际上并不存在于 Cloud Storage 中。如果您在存储桶 your-bucket 中创建名为 folder1/file.txt
的对象,则该对象的路径为 your-bucket/folder1/file.txt
。没有 folder1
文件夹,只有一个名称中包含 folder1
的对象。
因此,如果您想为组织创建一个“文件夹”并立即将一个对象放入其中,请在名称前使用“文件夹”命名您的对象,如果它们出现,GCS 将负责“创建”它们不存在。