繁体   English   中英

Python3 - 在 yaml 中写回相同的流

[英]Python3 - write back to same stream in yaml

目标:有一个包含多个流的 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 ; 通过保留其他原始流,以及我附加了一个键的流。

您需要将读取的文档列表存储在某处,以便您可以再次转储它:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM