GCS - 从 Google Cloud Storage 直接读取文本文件到 python

Posted

技术标签:

【中文标题】GCS - 从 Google Cloud Storage 直接读取文本文件到 python【英文标题】:GCS - Read a text file from Google Cloud Storage directly into python 【发布时间】:2018-06-25 00:46:59 【问题描述】:

我现在觉得有点傻。我一直在阅读大量文档和 *** 问题,但我无法正确理解。

我在 Google Cloud Storage 上有一个文件。它在一个桶'test_bucket'中。在此存储桶内有一个文件夹“temp_files_folder”,其中包含两个文件,一个名为“test.txt”的 .txt 文件和一个名为“test.csv”的 .csv 文件。这两个文件只是因为我尝试同时使用这两个文件,但结果都是一样的。

文件中的内容是

hej
san

我希望像在本地使用

一样将它读入 python
textfile = open("/file_path/test.txt", 'r')
times = textfile.read().splitlines()
textfile.close()
print(times)

给了

['hej', 'san']

我尝试过使用

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)

但它给出了输出

<bound method Blob.download_as_string of <Blob: test_bucket, temp_files_folder/test.txt>>

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

【问题讨论】:

【参考方案1】:

download_as_string是一个方法,你需要调用它。

print(blob.download_as_string())

更有可能,您想将其分配给一个变量,以便您下载一次,然后可以打印它并使用它做任何其他事情:

downloaded_blob = blob.download_as_string()
print(downloaded_blob)
do_something_else(downloaded_blob)

【讨论】:

我收到DistributionNotFound: The 'google-cloud-storage' distribution was not found and is required by the application 错误 如何在 gcp 中解析 tsv 并将其转换为 json? (这些都没有帮助我)。 从今天开始,download_as_string 已被弃用,取而代之的是 download_as_text googleapis.dev/python/storage/latest/…【参考方案2】:

方法'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]")

【讨论】:

你救了我! 你能告诉我怎么做excel文件吗? @imjoymhnt 这是相同的过程。您只需要使用一个库来处理 excel 文件。例如。 openpyxl(即 pip install openpyxl)【参考方案3】:

根据文档 (https://googleapis.dev/python/storage/latest/blobs.html),截至撰写本文时 (2021/08),download_as_string 方法是 download_as_byte 方法的贬值别名,正如名称所暗示的那样,它返回一个byte 对象。

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

例如,从存储桶 MYBUCKET 下载文件 MYFILE 并将其存储为 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")

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

import json
downloaded_json_file = json.loads(blob.download_as_text(encoding="utf-8"))

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

import yaml
downloaded_yaml_file = yaml.safe_load(blob.download_as_text(encoding="utf-8"))

【讨论】:

【参考方案4】:

在阅读 docx / 文本文件时有效

    from google.cloud import storage
    # create storage client
    storage_client = storage.Client.from_service_account_json('**PATH OF JSON FILE**')
    bucket = storage_client.get_bucket('**BUCKET NAME**')
    # get bucket data as blob
    blob = bucket.blob('**SPECIFYING THE DOXC FILENAME**')
    downloaded_blob = blob.download_as_string()
    downloaded_blob = downloaded_blob.decode("utf-8") 
    print(downloaded_blob)

【讨论】:

以上是关于GCS - 从 Google Cloud Storage 直接读取文本文件到 python的主要内容,如果未能解决你的问题,请参考以下文章

从 Google Cloud Storage 复制时排除特定文件或目录

如何使用 google-cloud 客户端将大于 32MB 的文件上传到 GCS?

Google Cloud Storage + Python:有啥方法可以在 GCS 的某个文件夹中列出 obj?

我们可以使用单个 Google Cloud Dataflow 将来自多个 Pubsub(源)的数据写入多个 GCS(接收器)吗?

在kubernetes引擎中将数据从docker容器存储到GCS中时,得到 "权限不足 "的错误信息。

将大量文件从 Google Cloud Storage 复制到 Google Colab,无需记录/打印