使用 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 在谷歌云存储桶中创建文件夹的主要内容,如果未能解决你的问题,请参考以下文章

如何在谷歌云数据存储中创建新模型(种类)

在谷歌云上创建集群

我正在使用 Python 创建一个 lambda 以在 s3 存储桶中创建一个文件,但它只创建一行。需要基于迭代的创建

如何在谷歌 vm 存储桶服务器中提供静态文件?

gsutil 命令删除前一天的旧文件

谷歌云存储功能在订阅者连接时发送已发送的消息