我需要使用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'
我该如何解决我的问题?
2条答案
按热度按时间fslejnso1#
正如john在评论中提到的,从本体论上讲,桶中可能不存在桶。
有关文档详细信息,请参见bucket命名指南。
简言之:
全局命名空间中只有一个级别的bucket(因此bucket名称是全局唯一的)。除了bucket名称之外的所有内容都属于一个对象名称。
例如,您可以创建一个bucket(让我们猜测名称尚未使用),如
data_bucket_10_07
. 在这种情况下,它可能看起来像gs://data_bucket_10_07
然后,您可能希望以这样的方式存储一些对象(文件),它看起来像一个目录层次结构,所以,假设有/01/data.csv
对象和/02/data.csv
对象在哪里01
及02
应该在语义上反映某个日期。那些
/01/
及/02/
元素-本质上是对象名称的开始部分(换句话说,就是对象的前缀)。到目前为止,bucket的名称是
gs://data_bucket_10_07
对象名称是/01/data.csv
及/02/data.csv
我建议查看对象命名指南文档,其中对这些想法的描述要比一句话好得多。ej83mcc02#
其他评论在详细说明嵌套bucket是不可能的方面做得很好,但它们仅在以下方面给出了建议:gcs不依赖文件夹,仅在web ui上以层次结构显示内容,以便于使用。
从文件中:
云存储使用平面名称空间运行,这意味着文件夹实际上不存在于云存储中。如果创建一个名为
folder1/file.txt
在您的bucket中,对象的路径是your-bucket/folder1/file.txt
. 没有folder1
文件夹,只是一个具有folder1
作为其名称的一部分。所以,如果您想为组织创建一个“文件夹”,并立即在其中放置一个对象,请在名称前面加上“文件夹”来命名您的对象,如果它们不存在,gcs将负责“创建”它们。