相关疑难解决方法(0)

如何将文件从谷歌云存储打开到云函数中

以下是我通常将 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

7
推荐指数
1
解决办法
4140
查看次数

将csv写入谷歌云存储

我想了解如何将多行 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)

添加换行符,但再次从头开始写入。

有人可以说明这种方法是什么吗?我可以将所有行合并为一个字符串,或者编写一个临时文件,但这看起来非常难看。

也许作为文件打开?

python csv google-cloud-storage

5
推荐指数
2
解决办法
9098
查看次数