Python3 - запись в тот же поток в yaml - PullRequest
0 голосов
/ 02 апреля 2020

Цель : существует файл yaml с несколькими потоками. Я хочу добавить ключ / значение в один поток. Затем запишите дополнение, включая исходные другие потоки, обратно в файл.

Пример:

file.yaml содержит:

---
one_key: value
---
kind: Deployment
appendhere:
  subkey: subvaluekey
---
third_key: value

Теперь запустите python скрипт должен запускаться с желаемым результатом:

---
one_key: value
---
kind: Deployment
appendhere:
  subkey: subvaluekey
  alright: value
---
third_key: value

Мой код : я могу добавить подраздел в поток.

#!/usr/bin/env python3
import yaml

stream = open('file.yaml', 'r')
for data in yaml.load_all(stream, Loader=yaml.FullLoader):
  for k, v in data.items():
    if "kind" in k:
      if "Deployment" in v:
          data['appendhere'].update({'addedkey': {'alright', 'value'}})

Я не знать, как запрограммировать Python для обратной записи в file.yaml; сохранив другие исходные потоки и поток, к которому я добавил ключ.

1 Ответ

1 голос
/ 02 апреля 2020

Вам нужно где-то хранить список прочитанных документов, чтобы вы могли снова его выгрузить:

with open('file.yaml', 'r+') as stream:
  documents = list(yaml.load_all(stream, Loader=yaml.FullLoader))
  for data in documents:
    # [snip] modification code
  # move position in stream to front
  stream.seek(0)
  yaml.dump_all(documents, stream)
  # discards surplus content when new data is smaller than old data
  stream.truncate()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...