以下是我通常将 GCS 文件下载到本地的方法:
storage_client = storage.Client()
bucket = storage_client.get_bucket('mybucket')
blob = bucket.blob('myBigFile.txt')
blob.download_to_filename('myBigFile.txt)
Run Code Online (Sandbox Code Playgroud)
我正在处理的文件比云功能允许的大小/内存大得多(例如,几 GB 到几 TB),因此上述方法不适用于这些大文件。
是否有更简单的“流式传输”(参见下面的示例 1)或“直接访问”(参见下面的示例 2)方式在云功能中处理 GCS 文件?
我想做的两个例子是:
# 1. Load it in chunks of 5GB -- "Streaming"
storage_client = storage.Client()
bucket = storage_client.get_bucket('mybucket')
blob = bucket.blob('myBigFile.txt')
while True:
data = blob.download_to_filename('myBigFile.txt', chunk_size=5GB)
do_something(data)
if not data: break
Run Code Online (Sandbox Code Playgroud)
或者:
# 2. Read the data from GCS without downloading it locally -- "Direct Access"
storage_client = storage.Client()
bucket = storage_client.get_bucket('mybucket')
blob = bucket.blob('myBigFile.txt')
with blob.read_filename('myBigFile.txt') as …Run Code Online (Sandbox Code Playgroud) python google-cloud-storage google-cloud-platform google-cloud-functions
我想了解如何将多行 csv 文件写入谷歌云存储。我只是没有遵循文档
接近这里: 无法读取上传到谷歌云存储桶的 csv 文件
例子:
from google.cloud import storage
from oauth2client.client import GoogleCredentials
import os
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = "<pathtomycredentials>"
a=[1,2,3]
b=['a','b','c']
storage_client = storage.Client()
bucket = storage_client.get_bucket("<mybucketname>")
blob=bucket.blob("Hummingbirds/trainingdata.csv")
for eachrow in range(3):
blob.upload_from_string(str(a[eachrow]) + "," + str(b[eachrow]))
Run Code Online (Sandbox Code Playgroud)
这让你在谷歌云存储上只有一行
3,c
Run Code Online (Sandbox Code Playgroud)
显然它每次打开一个新文件并写下这一行。
好的,添加一个新行 delim 怎么样?
for eachrow in range(3):
blob.upload_from_string(str(a[eachrow]) + "," + str(b[eachrow]) + "\n")
Run Code Online (Sandbox Code Playgroud)
添加换行符,但再次从头开始写入。
有人可以说明这种方法是什么吗?我可以将所有行合并为一个字符串,或者编写一个临时文件,但这看起来非常难看。
也许作为文件打开?