使用python在google存储中的bucket中创建一个新bucket

nbysray5  于 2021-09-08  发布在  Java
关注(0)|答案(2)|浏览(425)

我需要使用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'

我该如何解决我的问题?

fslejnso

fslejnso1#

正如john在评论中提到的,从本体论上讲,桶中可能不存在桶。
有关文档详细信息,请参见bucket命名指南。
简言之:
全局命名空间中只有一个级别的bucket(因此bucket名称是全局唯一的)。除了bucket名称之外的所有内容都属于一个对象名称。
例如,您可以创建一个bucket(让我们猜测名称尚未使用),如 data_bucket_10_07 . 在这种情况下,它可能看起来像 gs://data_bucket_10_07 然后,您可能希望以这样的方式存储一些对象(文件),它看起来像一个目录层次结构,所以,假设有 /01/data.csv 对象和 /02/data.csv 对象在哪里 0102 应该在语义上反映某个日期。
那些 /01//02/ 元素-本质上是对象名称的开始部分(换句话说,就是对象的前缀)。
到目前为止,bucket的名称是 gs://data_bucket_10_07 对象名称是 /01/data.csv/02/data.csv 我建议查看对象命名指南文档,其中对这些想法的描述要比一句话好得多。

ej83mcc0

ej83mcc02#

其他评论在详细说明嵌套bucket是不可能的方面做得很好,但它们仅在以下方面给出了建议:gcs不依赖文件夹,仅在web ui上以层次结构显示内容,以便于使用。
从文件中:
云存储使用平面名称空间运行,这意味着文件夹实际上不存在于云存储中。如果创建一个名为 folder1/file.txt 在您的bucket中,对象的路径是 your-bucket/folder1/file.txt . 没有 folder1 文件夹,只是一个具有 folder1 作为其名称的一部分。
所以,如果您想为组织创建一个“文件夹”,并立即在其中放置一个对象,请在名称前面加上“文件夹”来命名您的对象,如果它们不存在,gcs将负责“创建”它们。

相关问题