如何从Google Cloud Bucket下载文件?

时间:2018-11-09 20:15:08

标签: python google-cloud-platform cloud google-cloud-storage

我刚刚可以访问Google Cloud Storage上的存储桶gs:// asdasdasdasdd-sadasdasd,其中包含用于测试练习的文件。

他们说我可以使用我的Google帐户。

但是我应该如何在python中从那里下载文件rom?用哪个credentails?

我创建了服务帐户并使用我的凭据下载了json文件,但禁止从存储桶中下载文件。

我应该如何进一步处理?

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from io import BytesIO

os.environ["GOOGLE_APPLICATION_CREDENTIALS"]="account.json"

from google.cloud import storage

storage_client = storage.Client()
bucket = storage_client.get_bucket('asdasdasdasdd-sadasdasd')
blob = bucket.blob('streams/2017/09/09/allcountries')
path = "gs://asdasdasdasdd-sadasdasd/streams/2017/09/09/allcountries.csv"
df = pd.read_csv(path)

我可以使用gsutil下载文件,但我需要对python进行同样的操作。某种程度上,我需要验证我的电子邮件,因为我被授权在Google电子邮件中下载文件。

2 个答案:

答案 0 :(得分:1)

我假设您被授予role访问存储桶的权限。如果是这样,则不需要service account密钥(.json文件),因为该密钥是由您生成的,因此它是授予项目下的资源的权限,而不是其他人的权限。

确保您获得的角色是roles/storage.admin,因为this是从指定存储桶下载文件所需的角色。

另一种选择是确实使用包含相同角色的服务帐户密钥,但是必须由存储桶的所有者将其提供给您。

最后,我能够连接到存储桶时,尝试了您的代码并遇到错误。如果遇到IOError提示文件不存在,请查看this帖子以寻求可能的解决方案。

答案 1 :(得分:0)

尝试一下:

import pathlib
import google.cloud.storage as gcs

client = gcs.Client()

#set target file to write to
target = pathlib.Path("local_file.txt")

#set file to download
FULL_FILE_PATH = "gs://bucket_name/folder_name/file_name.txt"

#open filestream with write permissions
with target.open(mode="wb") as downloaded_file:

        #download and write file locally 
        client.download_blob_to_file(FULL_FILE_PATH, downloaded_file)