用于上传到Google云存储的子流程调用或python库?
我正在尝试做一个脚本来上传文件到谷歌云存储。我注意到有两种方法可以做到这一点: a) 使用gsutil并通过子流程从python调用它 b) 使用“原生”方法从google.cloud导入存储 每种方法的优点/缺点是什么? (a)方法似乎更简单,但我不知道与b)方法相比是否有任何缺点 谢谢 (a)的例子 (b)的例子用于上传到Google云存储的子流程调用或python库?,python,google-cloud-platform,google-cloud-storage,Python,Google Cloud Platform,Google Cloud Storage,我正在尝试做一个脚本来上传文件到谷歌云存储。我注意到有两种方法可以做到这一点: a) 使用gsutil并通过子流程从python调用它 b) 使用“原生”方法从google.cloud导入存储 每种方法的优点/缺点是什么? (a)方法似乎更简单,但我不知道与b)方法相比是否有任何缺点 谢谢 (a)的例子 (b)的例子 底线是你应该选择最适合你偏好的方法。如果这两种方式对你都有效,那么这是一个偏好的问题 但是,如果您打算在除了正确安装和配置了gsutil的机器之外的任何地方运行此代码,那么您将遇到
底线是你应该选择最适合你偏好的方法。如果这两种方式对你都有效,那么这是一个偏好的问题 但是,如果您打算在除了正确安装和配置了gsutil的机器之外的任何地方运行此代码,那么您将遇到问题。它变成了一个外部依赖项,您可能不喜欢尝试在任何地方设置它,除非它已经工作了 如果您希望更轻松地移动此代码,则客户端库更容易预测,并且应该在有internet连接的任何位置运行,前提是您的代码可以使用服务帐户凭据来初始化SDK
filename='myfile.csv'
gs_bucket='my/bucket'
parallel_threshold='150M' # minimum size for parallel upload; 0 to disable
subprocess.check_call([
'gsutil',
'-o', 'GSUtil:parallel_composite_upload_threshold=%s' % (parallel_threshold,),
'cp', filename, 'gs://%s/%s' % (gs_bucket, filename)
])
from google.cloud import storage
def upload_blob(bucket_name, source_file_name, destination_blob_name):
"""Uploads a file to the bucket."""
# bucket_name = "your-bucket-name"
# source_file_name = "local/path/to/file"
# destination_blob_name = "storage-object-name"
storage_client = storage.Client()
bucket = storage_client.bucket(bucket_name)
blob = bucket.blob(destination_blob_name)
blob.upload_from_filename(source_file_name)
print(
"File {} uploaded to {}.".format(
source_file_name, destination_blob_name
)
)