Как записать и прочитать json объектов в файл в облаке Google в для l oop с помощью Python - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь записать список json объектов в файл в облаке Google, используя python. Я могу записать в файл один объект. Но он не работает, когда я пытаюсь написать его в for l oop.

Вот код, который работает для одного объекта, но не работает, когда я пишу итеративно


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 

Но это не добавление объектов в файл json. Он их перезаписывает.

Также как итеративно читать json объекты из такого файла в облаке Google

Ответы [ 2 ]

2 голосов
/ 10 июля 2020

Что касается облачного хранилища Google docs :

Объекты неизменяемы, что означает, что загруженный объект не может изменяться в течение всего срока его хранения.

Итак, если вы хотите добавить объект к объекту, то единственный способ:

  1. Вы можете объединить его перед загрузкой в ​​Google Cloud Storage
  2. Или при каждой загрузке вам придется загрузите уже существующий контент, объедините его с новыми данными на вашем локальном компьютере и затем загрузите его обратно.
2 голосов
/ 10 июля 2020

Я не знаком с конкретными c подробностями об облачном хранилище; однако похоже, что вы перезаписываете файл с каждым l oop.

Прежде всего, json_object = {'i': 'i'} не влияет на каждый l oop, так как вам нужно назначить переменную.

Во-вторых, я попытаюсь проиллюстрировать это на примере кода.

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')  

Возьмите загрузку файла за пределы l oop и массово добавьте все ваши данные в файл.

В вашем случае вы можете имитировать массовую загрузку из списка, сшивая новые строки в файл чем-то похожим на: "\n".join(['I', 'would', 'expect', 'multiple', 'lines']) или используя собственный метод обновления (если доступен).

...