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
我希望像在本地使用
一样将它读入 pythontextfile = 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(接收器)吗?