【问题标题】:Upload a file to Google Storage via Python given the URI给定 URI,通过 Python 将文件上传到 Google Storage
【发布时间】:2020-12-04 07:34:41
【问题描述】:

我想上传一个文件到谷歌存储,刚刚给出gs://<bucket_name>/<blob_name>格式的存储uri。

我知道可以使用类似的代码在 Python 中上传文件

def upload_file(filepath, bucket_name, blob_name):
   client = storage.Client()
   bucket = client.get_bucket(bucket_name)
   blob = bucket.blob(blob_name)
   blob.upload_from_filename(filepath)

但我实际上更喜欢的是一个只获取本地文件路径和谷歌存储 uri 的函数,类似于 gsutil 的复制命令:gsutil cp <filepath> gs://<bucket_name>/<blob_name>。所以,类似的事情:

def upload_file_to_uri(filepath, gs_uri):
   pass

我是否必须编写一个正则表达式命令来从给定的 uri 解析存储桶和 blob 名称,还是已经存在一个更优雅的解决方案?

【问题讨论】:

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


    【解决方案1】:

    如果您使用 python 客户端库,则需要像您在问题中提到的那样上传文件。不过,您可以执行以下操作

    import subprocess
    subprocess.call("gsutil -m cp gs://my-bucket-name/* /home/<username>/rawdata/", shell=True)
    

    您可以在here 找到类似的答案。

    【讨论】:

    • 这仅适用于 Cloud Run 和 Compute engine/GKE。
    【解决方案2】:

    我不相信它目前存在于 Python 库中。您需要解析存储桶和 blob 名称。

    也就是说,欢迎您使用 gsutil 的实现。它在 Apache 许可下。 https://github.com/GoogleCloudPlatform/gsutil/blob/c84f8487460596c1bf7f049bb31714262bf223ca/gslib/storage_url.py#L184

    它可能比您需要的稍微复杂一些,因为它支持代号、通配符和路径分隔符,但它可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-28
      • 1970-01-01
      • 2014-01-05
      • 2016-05-06
      • 2017-12-27
      • 2017-04-02
      • 2019-11-07
      • 1970-01-01
      相关资源
      最近更新 更多