我尝试使用gsutil下载bucket中的文件,但现在想将下载合并到python脚本中,以自动执行下载过程(用于下载特定日期的数据)。下面的gsutil代码运行良好。在
gsutil -m cp -r gs://gcp-public-data-goes-16/GLM-L2-LCFA/2019/001 C:\dloadFiles
使用我尝试过的存储客户端:
from google.cloud import storage
client = storage.Client()
with open('C:\dloadFiles') as file_obj:
client.download_blob_to_file(
'gs://gcp-public-data-goes-16/GLM-L2-LCFA/2019/001', file_obj)`
我得到错误“DefaultCredentialsError:无法自动确定凭据。请设置GOOGLE_APPLICATION_凭据或显式创建凭据并重新运行应用程序。有关详细信息,请参阅https://cloud.google.com/docs/authentication/getting-started“
这是一个公开的桶。在
使用GCP凭据进行身份验证后,还需要运行:
对应用程序sdk(如Python客户机库)进行身份验证。然后您就可以通过Python与GCP服务进行交互。 另外,您正在使用
gsutil
命令复制一整批文件,而不是像使用python
那样只复制一个文件。所以您可能想先list_blobs
,然后迭代地将它们下载到文件中。 另请查看blob.download_to_file
为您节省一些编码(docs here)。这样就可以直接将blob发送到文件名,而无需先打开文件。在您没有安装应用程序凭据\ 设置和下面的链接 https://stackoverflow.com/questions/45501082/set-google-application-credentials-in-python-project-to-use-google-api
设置凭据后,您的代码将正常工作
首先,在这个桶上关闭public,除非你真的需要这个桶是公共的。对于私有访问,您应该使用服务帐户(您的代码)或OAuth凭据。在
如果您在googlecompute服务中运行此代码,将自动发现凭据(ADC)。在
如果您在Google云之外运行,请更改以下行:
为此:
^{pr2}$代码中的这一行试图打开一个目录。这是不对的。您需要指定文件名,而不是目录名。您还需要指定写入权限:
更改为
或二进制(数据)文件:
我假设这个路径是一个文件blob,而不是GCS上的“模拟”文件夹。如果这是一个文件夹,则需要将其更改为文件(存储对象blob)。在
相关问题 更多 >
编程相关推荐