我正在使用google云功能在google云存储上创建一个CSV文件。现在我想编辑那个文件-可以在该文件中追加数据吗?如果是,那怎么做?
发布于 2019-11-20 07:12:19
是面向Google平台的对象存储管理服务。与块存储或文件系统存储不同,存储的对象是不可变的。
正如官方医生中提到的那样:
对象是不可变的,这意味着上载的对象在其存储寿命期间不能更改。对象的存储生存期是从成功创建对象(上载)到成功删除对象之间的时间。实际上,这意味着您不能对对象进行增量更改,例如追加操作或截断操作。然而,有可能覆盖存储在云存储中的对象,并且这样做是原子性的--直到新上传完成之前,对象的旧版本将被提供给读者,并且在上传完成之后,对象的新版本将被服务给读者。因此,一个覆盖操作仅仅标志着一个不可变对象的生存期的结束和一个新的不可变对象的生存期的开始。
作为一种解决办法,我们可以考虑将多个文件上传到一个桶中,然后将所有以前的文件都上传到通过组合创建一个新对象中。
gsutil compose gs://bucket/obj1 [gs://bucket/obj2 ...] gs://bucket/composite注意,这个compose命令也可以通过JSON API获得:
POST https://storage.googleapis.com/storage/v1/b/bucket/o/destinationObject/compose并通过云存储客户端库
所以这个调用可以很容易地集成到您的代码中。确保在需要的角色之前授予对桶的访问权限。
发布于 2019-11-20 08:45:18
我使用这个python脚本将数据附加到csv文件中。此脚本将下载文件,追加数据并再次上传到桶中的同一个文件。您可以在云函数中轻松地实现这一点。
import csv
from google.cloud import storage
client = storage.Client()
bucket = client.get_bucket('thehotbucket')
blob = bucket.get_blob('data1.csv')
blob.download_to_filename('data1.csv')
fields = ['first', 'second', 'third']
with open(r'data1.csv', 'a') as f:
writer = csv.writer(f)
writer.writerow(fields)
blob = bucket.blob("data1.csv")
blob.upload_from_filename("data1.csv")如果您只想合并文件,可以使用gsutil命令。
gsutil compose gs://bucket/obj1 [gs://bucket/obj2 ...] gs://bucket/obj1发布于 2019-11-20 15:40:40
GCS是一个对象存储,一旦推到GCS桶中,就不允许更新/编辑文件。
更新驻留在GCS桶中的文件的唯一方法是下载该文件->进行所需的更改,然后再回推到GCS桶。这将覆盖包含新内容的文件。
https://stackoverflow.com/questions/58947608
复制相似问题