我刚刚可以访问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电子邮件中下载文件。
答案 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)