如何使用Python在for循环中向谷歌云中的文件写入和读取json对象

NG_*_*_21 4 python json google-cloud-storage google-cloud-platform

我正在尝试使用 python 将 json 对象列表写入谷歌云中的文件。我能够在文件中写入单个对象。但当我尝试将其写入 for 循环时,它不起作用。

这是适用于单个对象但在我迭代编写时不起作用的代码


from google.cloud import storage
import json

bucket_name = 'gcs_bucket_user'
bucket = storage.Client().get_bucket(bucket_name)

for i in range(0,5):
    json_object = {'i': 'i'}
    blob = bucket.blob('text.json')
    blob.upload_from_string(data=json.dumps(json_object),content_type='application/json')

Expected Output
{'0':'0'}
{'1':'1'}
{'2':2}
and so on 
Run Code Online (Sandbox Code Playgroud)

但这并不是在 json 文件中追加对象。它正在覆盖它们。

另外,从谷歌云中的此类文件中迭代读取 json 对象的方法是什么

alt*_*-f4 7

我不熟悉云存储的具体细节;但是,看起来您每次循环都会覆盖该文件。

首先,json_object = {'i': 'i'}对每个循环都没有影响,因为您需要指定一个变量。

其次,我将尝试用代码示例来说明。

from google.cloud import storage
import json

bucket_name = 'gcs_bucket_user'
bucket = storage.Client().get_bucket(bucket_name)
# define a dummy dict
some_json_object = {'foo': list()}

for i in range(0, 5):
    some_json_object['foo'].append(i)

blob = bucket.blob('text.json')
# take the upload outside of the for-loop otherwise you keep overwriting the whole file
blob.upload_from_string(data=json.dumps(some_json_object),content_type='application/json')  
Run Code Online (Sandbox Code Playgroud)

将文件上传置于循环之外,并将所有数据批量附加到文件中。

在您的情况下,您可以通过将新行缝合到文件中来模拟列表中的批量上传,方法类似于:"\n".join(['I', 'would', 'expect', 'multiple', 'lines'])或使用本机方法进行更新(如果可用)。