使用Python将文件夹上传到Google Cloud Storage?

时间:2019-06-25 17:31:17

标签: python directory google-cloud-platform upload

我找到了upload_from_file和upload_from_filename,但是是否有通过Python将整个文件夹上传到Cloud Storage的函数或方法?

4 个答案:

答案 0 :(得分:0)

我不是直接在Python API中考虑,不是,但是在命令行工具gsutil中有。只要您在从中调用Python的shell中的命令行上通过了身份验证,就可以通过python脚本进行系统调用以调用gsutil工具。

命令如下所示:

gsutil -m cp -r <foldername> gs://<bucketname>

答案 1 :(得分:0)

Google Cloud Storage并没有真正的“目录”概念,只是二进制Blob(如果您以这种方式命名,它们的键名可能看起来像目录)。因此,您当前使用Python的方法是合适的。

答案 2 :(得分:0)

这对我有用。将本地目录中的所有内容复制到Google云存储中的特定存储区名称/全路径(递归):

import glob
from google.cloud import storage
import os

def upload_local_directory_to_gcs(local_path, bucket, gcs_path):
    assert os.path.isdir(local_path)
    for local_file in glob.glob(local_path + '/**'):
        if not os.path.isfile(local_file):
           upload_local_directory_to_gcs(local_file, bucket, gcs_path + "/" + os.path.basename(local_file))
    else:
        remote_path = os.path.join(gcs_path, local_file[1 + len(local_path):])
        blob = bucket.blob(remote_path)
        blob.upload_from_filename(local_file)


upload_local_directory_to_gcs(local_path, bucket, BUCKET_FOLDER_DIR)

答案 3 :(得分:0)

这是对@Maor88 提供的答案的改进

该函数可用于上传文件或目录到gcs。

from google.cloud import storage
import os
import glob


def upload_to_bucket(src_path, dest_bucket_name, dest_path):
        bucket = storage_client.get_bucket(dest_bucket_name)
        if os.path.isfile(src_path):
            blob = bucket.blob(os.path.join(dest_path, os.path.basename(src_path)))
            blob.upload_from_filename(src_path)
            return
        for item in glob.glob(src_path + '/*'):
            if os.path.isfile(item):
                blob = bucket.blob(os.path.join(dest_path, os.path.basename(item)))
                blob.upload_from_filename(item)
            else:
                upload_to_bucket(item, dest_bucket_name, os.path.join(dest_path, os.path.basename(item)))