我想从 python应用程序/命令(例如youtube-dl或从第三方URL下载的任何其他库)下载数据直接到 google cloud storage(Bucket)。
我已使用 gsutil 流命令直接将数据从流程流传输到gcs,但它仅将控制台输出保存到存储桶
我也不想挂载存储,因为我想与分布式系统共享该存储
有什么方法可以下载而不先下载文件系统,然后再将其复制到Google云存储中?
谢谢
答案 0 :(得分:0)
您描述的情况似乎不可能:在Python中查看Cloud Storage library的文档和源代码只会给您3个选择:从文件上传(已经在磁盘中),上传提供文件名(指向磁盘中已存在文件的路径)并从字符串上传(将文本上传为.txt文件)。
您将需要从提到的任何程序中下载文件(如注释中所述,您可以将其下载到临时文件夹),将文件上传到GCS,然后从您的临时文件夹中删除。
答案 1 :(得分:0)
据我了解,您正在寻找除 gsutil流之外的另一种技术,以便直接存储到存储桶中。考虑到您已经拥有Python的命令应用程序。您有两种选择可以实现自己的目标:
选项1 :将数据存储到python变量中,然后借助boto client library plugin(使用Python:2.6.x和2.7.x)将其推入存储桶中
>Google文档here概述了如何在Python中利用boto的想法(以及用法示例)。
但是,这是该链接的复制/粘贴版本,并提供了简短说明。
上传:
dst_uri = boto.storage_uri(+'/'+,'gs') dst_uri.new_key()。set_contents_from_stream()
下载:
导入系统 src_uri = boto.storage_uri(+'/'+,'gs') src_uri.get_key()。get_file(sys.stdout)
其中: 存储桶是您已设置的应用存储桶名称,而 object 是您要存储的对象(您可以在GCP控制台中找到存储桶名称的信息) 。另外,关于GCS存储桶的妙处在于,您可以在字面上存储所需的任何内容(即:无需指定要存储的内容或在存储之前对任何内容进行编码)。
选项2 :使用Google Cloud Storage Client Libraries存储数据。更准确地说,在uploading objects的帮助下,您正在寻找的功能是blob。 (您也可以在Blob中存储任何形式的数据)
因为您不要保存在本地并将直接存储到存储桶中。我建议使用以下方法:
upload_from_string(data,content_type ='text / plain',client = None,redefined_acl = None)
(Google定义:从提供的字符串中上传此Blob的内容)
此方法中要注意的重要一点是,您可以设置要存储的数据类型。根据您要存储的内容(从第三方URL下载的库),您可以在str或bytes之间进行选择。但是,我建议您先尝试字节,因为它允许ASCII字符。