Ahs*_*eem 5 python yaml pyyaml python-3.x
我正在处理一个对象,其中首先 python 读取 YAML,进行一些更改,然后将它们写回文件。加载和更新值部分工作正常,但是当我编写文件时,它会列出相当独立的文档。
测试.yaml
apiVersion: v1
data:
databag1: try this
databag2: then try this
kind: ConfigMap
metadata:
name: data bag info
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
app: data-bag-service
name: data-bag-tagging
Run Code Online (Sandbox Code Playgroud)
代码块
import yaml
with open("./testing.yaml", "r") as stream:
deployment_dict= list(yaml.safe_load_all(stream))
print(deployment_dict)
with open("./testing.yaml", "w") as service_config:
yaml.dump(
deployment_dict,
service_config,
default_flow_style=False
)
Run Code Online (Sandbox Code Playgroud)
我得到的转换: testing.yaml
- apiVersion: v1
data:
databag1: try this
databag2: then try this
kind: ConfigMap
metadata:
name: data bag info
- apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
app: data-bag-service
name: data-bag-tagging
Run Code Online (Sandbox Code Playgroud)
如何使用---指令结束指示符达到原始状态?
根据文档:
如果您需要将多个 YAML 文档转储到单个流中,请使用函数
yaml.dump_all.yaml.dump_all接受一个列表或一个生成器
yaml.dump_all(
deployment_dict,
service_config,
default_flow_style=False
)
Run Code Online (Sandbox Code Playgroud)
您仍然需要default_flow_style=False获取块样式输出。
import yaml
with open("./testing.yaml", "r") as stream:
d = list(yaml.safe_load_all(stream))
d.append(d[-1])
with open("./testing2.yaml", "w") as stream:
yaml.dump_all(
d,
stream,
default_flow_style=False
)
Run Code Online (Sandbox Code Playgroud)
apiVersion: v1
data:
databag1: try this
databag2: then try this
kind: ConfigMap
metadata:
name: data bag info
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
app: data-bag-service
name: data-bag-tagging
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
app: data-bag-service
name: data-bag-tagging
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5022 次 |
| 最近记录: |