使用 python 在谷歌云存储桶中创建文件夹
Posted
技术标签:
【中文标题】使用 python 在谷歌云存储桶中创建文件夹【英文标题】:Create Folders inside google cloud storage bucket using python 【发布时间】:2018-05-21 19:36:27 【问题描述】:我正在尝试使用 python 客户端库在 Google Cloud 存储上创建一个包含 2 个空文件夹的新存储桶。
我参考了GCS
(https://google-cloud-python.readthedocs.io/en/latest/storage/client.html) 的 python 客户端库 API,我找到了一个 create_bucket()
方法,但我还想在其中创建 2 个文件夹 - '已处理' 和 '未处理',但是找不到创建文件夹的方法。任何帮助将不胜感激。
谢谢
【问题讨论】:
【参考方案1】:GCS 有一个扁平的命名空间,即“文件夹”的概念不是内置在服务中,而是由各种客户端实现的抽象。例如,Cloud Storage Web UI (console.cloud.google.com/storage/browser) 和 gsutil 都使用以“/”结尾的对象名称来实现文件夹抽象 因此,您可以通过创建像 your-bucket/abc/def/ 这样的对象来创建文件夹 但对于了解/支持该命名约定的客户来说,这只是一个文件夹。
【讨论】:
谢谢迈克!我明白了,尽管我想事先有一个文件夹结构并每天创建新文件夹。我可以通过在上传文件时按约定命名文件来使用您的建议。但是,如何使用 python 客户端 API 将文件从一个文件夹移动到同一个存储桶中的另一个文件夹? 这个想法是我想要 2 个文件夹(未处理和已处理),以便我可以首先将输入文件保存在“未处理”文件夹中,使用数据流处理它们并将数据存储到 bigquery,然后最后数据流作业完成后将文件移动到“已处理”文件夹,以便下次我运行相同的数据流 ETL 作业时,它只会从“未处理”文件夹中提取文件 +Parth-desai 看起来 Mike 已经回答了你最初的问题。我会将他的答案标记为解决方案,并为其他问题创建一个新帖子。您可以在问题下方的评论中提及我,我会在看到它时立即回答。【参考方案2】:def copyFilesInFolder(self, file_name, src_blob_name, destination_blob_name):
"""Copies a blob from one bucket to another with a new name."""
# bucket_name = "your-bucket-name"
# blob_name = "your-object-name"
# destination_bucket_name = "destination-bucket-name"
# destination_blob_name = "destination-object-name"
# storage_client = storage.Client()
srcBlob = src_blob_name + '/' + file_name
destBlob = destination_blob_name + '/' + file_name
source_blob = self.bucket.blob(srcBlob)
destination_bucket = storage_client.bucket(destBlob)
blob_copy = self.bucket.copy_blob(
source_blob, self.bucket, destBlob
)
print(blob_copy)
print(
"File in bucket copied to blob in bucket .".format(
file_name,
src_blob_name,
file_name,
destination_blob_name,
)
)
return True
在 GCP 中没有直接创建文件夹的概念。所以我们可以在新文件夹中保存一个新文件,这样即使目标文件夹不存在也会被创建。
【讨论】:
以上是关于使用 python 在谷歌云存储桶中创建文件夹的主要内容,如果未能解决你的问题,请参考以下文章