使用Google云客户端Python库从bucket下载文件

2024-05-23 14:42:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用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

这是一个公开的桶。在


Tags: clientgsclouddatagooglestoragepublicfile
3条回答

使用GCP凭据进行身份验证后,还需要运行:

gcloud auth application-default

对应用程序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云之外运行,请更改以下行:

client = storage.Client()

为此:

^{pr2}$

代码中的这一行试图打开一个目录。这是不对的。您需要指定文件名,而不是目录名。您还需要指定写入权限:

with open('C:\dloadFiles') as file_obj:

更改为

with open('c:/directory/myfilename', 'w')

或二进制(数据)文件:

with open('c:/directory/myfilename', 'wb')

我假设这个路径是一个文件blob,而不是GCS上的“模拟”文件夹。如果这是一个文件夹,则需要将其更改为文件(存储对象blob)。在

gs://gcp-public-data-goes-16/GLM-L2-LCFA/2019/001

相关问题 更多 >