我尝试使用gsutil在存储桶中下载文件,但是现在想将下载内容合并到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_CREDENTIALS或明确创建凭据并重新运行该应用程序。有关更多信息,请参阅https://cloud.google.com/docs/authentication/getting-started”
这是一个公开可用的存储桶。
答案 0 :(得分:2)
您尚未设置GOOGLE_APPLICATION_CREDENTIALS 遵循以下链接和设置凭据 https://stackoverflow.com/questions/45501082/set-google-application-credentials-in-python-project-to-use-google-api
设置凭据后,您的代码即可使用
答案 1 :(得分:0)
使用GCP凭据进行身份验证后,您还需要运行:
gcloud auth application-default
对您的应用程序SDK(例如Python客户端库)进行身份验证。然后,您将能够通过Python与GCP服务进行交互。
另外,您将使用gsutil
命令复制整个文件负载,而不仅仅是像使用python
那样复制文件。因此,您可能想先list_blobs
,然后将其迭代下载到文件中。
另外,请检出blob.download_to_file
,为您节省一些编码(docs here)。这样,您可以直接将blob发送到文件名,而无需先打开文件。
答案 2 :(得分:0)
首先,请在此存储桶上关闭公共设置,除非您确实需要将该存储桶公开。对于私人访问,您应该使用服务帐户(您的代码)或OAuth凭据。
如果您在Google Compute Service中运行此代码,则会自动发现凭据(ADC)。
如果您在Google Cloud之外运行,请更改以下行:
client = storage.Client()
对此:
client = storage.Client().from_service_account_json('/full/path/to/service-account.json')
您代码中的这一行正在尝试打开目录。这是不正确的。您需要指定文件名而不是目录名。您还需要指定写权限:
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