【问题标题】:Create Folders inside google cloud storage bucket using python使用 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 个文件夹 - '已处理' 和 '未处理',但是找不到创建文件夹的方法。任何帮助将不胜感激。

谢谢

【问题讨论】:

    标签: python google-cloud-platform google-cloud-storage google-cloud-python


    【解决方案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 中没有直接创建文件夹的概念。所以我们可以在新文件夹中保存一个新文件,这样即使目标文件夹不存在也会被创建。

    【讨论】:

      猜你喜欢
      • 2012-09-13
      • 2016-01-31
      • 1970-01-01
      • 2016-01-17
      • 1970-01-01
      • 2016-02-14
      • 2020-02-15
      • 2023-03-03
      • 2021-03-30
      相关资源
      最近更新 更多