GCS - 直接从Google云端存储中读取文本文件到python中

dig*_*vee 11 python google-cloud-storage

我现在觉得有点蠢.我一直在阅读大量文档和stackoverflow问题,但我无法做到正确.

我在Google云端存储上有一个文件.它在一个桶'test_bucket'中.在这个存储桶中有一个文件夹'temp_files_folder',它包含两个文件,一个名为'test.txt'的.txt文件和一个名为'test.csv'的.csv文件.这两个文件只是因为我尝试使用两个文件,但结果是相同的.

文件中的内容是

hej
san
Run Code Online (Sandbox Code Playgroud)

我希望将它读入python,就像我在本地用的那样

textfile = open("/file_path/test.txt", 'r')
times = textfile.read().splitlines()
textfile.close()
print(times)
Run Code Online (Sandbox Code Playgroud)

这使

['hej', 'san']
Run Code Online (Sandbox Code Playgroud)

我试过用

from google.cloud import storage

client = storage.Client()

bucket = client.get_bucket('test_bucket')

blob = bucket.get_blob('temp_files_folder/test.txt')

print(blob.download_as_string)
Run Code Online (Sandbox Code Playgroud)

但它给出了输出

<bound method Blob.download_as_string of <Blob: test_bucket, temp_files_folder/test.txt>>
Run Code Online (Sandbox Code Playgroud)

如何获取文件中的实际字符串?

Dan*_*man 17

download_as_string 是一种方法,你需要调用它.

print(blob.download_as_string())
Run Code Online (Sandbox Code Playgroud)

更有可能的是,您希望将其分配给变量,以便您下载一次,然后可以打印它并使用它执行任何其他操作:

downloaded_blob = blob.download_as_string()
print(downloaded_blob)
do_something_else(downloaded_blob)
Run Code Online (Sandbox Code Playgroud)

  • 截至今天,“download_as_string”已弃用,取而代之的是“download_as_text”https://googleapis.dev/python/storage/latest/blobs.html#google.cloud.storage.blob.Blob.download_as_text (3认同)

dhe*_*inz 11

根据文档(https://googleapis.dev/python/storage/latest/blobs.html),截至撰写本文时(2021/08),该download_as_string方法是该方法的已弃用别名download_as_byte- 正如建议的名称 - 返回一个byte对象。

您可以改为使用该download_as_text方法返回一个str对象。

MYFILE例如,要从存储桶下载文件MYBUCKET并将其存储为 utf-8 编码字符串:

from google.cloud.storage import Client
client = Client()
bucket = client.get_bucket(MYBUCKET)
blob = bucket.get_blob(MYFILE)
downloaded_file = blob.download_as_text(encoding="utf-8")
Run Code Online (Sandbox Code Playgroud)

然后您还可以使用它来读取不同的文件格式。对于 json,将最后一行替换为

import json
downloaded_json_file = json.loads(blob.download_as_text(encoding="utf-8"))
Run Code Online (Sandbox Code Playgroud)

对于 yaml 文件,将最后一行替换为:

import yaml
downloaded_yaml_file = yaml.safe_load(blob.download_as_text(encoding="utf-8"))
Run Code Online (Sandbox Code Playgroud)


Sey*_*aty 10

方法“ download_as_string()”将以字节形式读入内容。

在下面找到处理 .csv 文件的示例。

import csv
from io import StringIO

from google.cloud import storage

storage_client = storage.Client()
bucket = storage_client.get_bucket(YOUR_BUCKET_NAME)

blob = bucket.blob(YOUR_FILE_NAME)
blob = blob.download_as_string()
blob = blob.decode('utf-8')

blob = StringIO(blob)  #tranform bytes to string here

names = csv.reader(blob)  #then use csv library to read the content
for name in names:
    print(f"First Name: {name[0]}")
Run Code Online (Sandbox Code Playgroud)