python操作yaml文件_python操作yaml说明

b473c6233e933feb77a9404a913e74bc.png

1. 安装PyYAML

pip install PyYAML

2. 加载yaml文件

直接使用yaml.load()函数

demo.yml :

kind: Deployment

apiVersion: apps/v1

metadata:

name: podinfo

namespace: yaml-demo

spec:

replicas: 1

selector:

matchLabels:

app: podinfo

template:

metadata:

labels:

app: podinfo

spec:

containers:

- name: podinfod

image: quay.io/stefanprodan/podinfo:0.3.0

ports:

- containerPort: 9898

load.py :

import yaml

import json

result = yaml.load(open("demo.yml"))

print json.dumps(result, indent=2)

输出 :

{

"kind": "Deployment",

"spec": {

"replicas": 1,

"template": {

"spec": {

"containers": [

{

"image": "quay.io/stefanprodan/podinfo:0.3.0",

"name": "podinfod",

"ports": [

{

"containerPort": 9898

}

]

}

]

},

"metadata": {

"labels": {

"app": "podinfo"

}

}

},

"selector": {

"matchLabels": {

"app": "podinfo"

}

}

},

"apiVersion": "apps/v1",

"metadata": {

"namespace": "yaml-demo",

"name": "podinfo"

}

}

3. 持久化dict到yml文件

使用yaml.safe_dump()函数

dump.py :

import yaml

d = {

"kind": "Deployment",

"spec": {

"replicas": 1,

"template": {

"spec": {

"containers": [

{

"image": "quay.io/stefanprodan/podinfo:0.3.0",

"name": "podinfod",

"ports": [

{

"containerPort": 9898

}

]

}

]

},

"metadata": {

"labels": {

"app": "podinfo"

}

}

},

"selector": {

"matchLabels": {

"app": "podinfo"

}

}

},

"apiVersion": "apps/v1",

"metadata": {

"namespace": "yaml-demo",

"name": "podinfo"

}

}

result = yaml.safe_dump(d, encoding="utf-8", allow_unicode=True, default_flow_style=False)

open("demo.yml", "w").write(result)

demo.yml :

apiVersion: apps/v1

kind: Deployment

metadata:

name: podinfo

namespace: yaml-demo

spec:

replicas: 1

selector:

matchLabels:

app: podinfo

template:

metadata:

labels:

app: podinfo

spec:

containers:

- image: quay.io/stefanprodan/podinfo:0.3.0

name: podinfod

ports:

- containerPort: 9898

补充知识:Python的PyYAML模块详解

简介

Python的PyYAML模块是Python的YAML解析器和生成器。

安装

简单安装

pip install pyyaml

从源码安装

下载源码包PyYAML-3.13.tar.gz 并解压,在命令行下切换到解压后的包目录内并执行如下命令:

python setup.py install

如果想使用比纯Python版本更快的LibYAML绑定,需要先下载并安装LibYAML,然后在安装PyYAML的时候执行如下命令:

python setup.py --with-libyaml install

为了使用基于LibYAML的解析器和生成器,请使用 CParser 和 CEmitter 类。例如:

from yaml import load, dump

try:

from yaml import Cloader as Loader, CDumper as Dumper

except ImportError:

from yaml import Loader, Dumper

# ...

data = load(stream, Loader=Loader)

# ...

output = dump(data, Dumper=Dumper)

请注意,基于纯Python和基于LibYAML的YAML解析器和生成器之间有一些细微但并不真正重要的区别。

最常被问到的问题

为什么如下所示的YAML文档在反序列化后再序列化,得到的YAML文档的格式与原来不一样?

import yaml

document = """

a: 1

b:

c: 3

d: 4

"""

print(yaml.dump(yaml.load(document)))

其中,上面代码的输出为:

a: 1

b: {c: 3, d: 4}

关于这个问题,其实,尽管最后得到的YAML文档的样式与原来的文档的样式不一致,但是却是正确的结果。

因为PyYAML默认会根据一个集合中是否有嵌套的集合来决定用哪种格式表示这个集合。如果一个集合中嵌套有其他集合,那么会使用块样式来表示,否则会使用流样式来表示。

如果想要集合总是以块样式表示,可以将 dump() 方法的 default_flow_style 参数值设为 False ,如下所示:

print(yaml.dump(yaml.load(document), default_flow_style=False))

上面代码的输出为:

a: 1

b:

c: 3

d: 4

使用详解

先导入 yaml 模块:

import yaml

加载YAML

警告:调用 yaml.load 处理从不可信任的源接收的数据可能存在风险。yaml.load 与 pickle.load 的功能一样强大,可以调用所有Python函数。

yaml.load 函数的作用是用来将YAML文档转化成Python对象。如下所示:

>>> yaml.load("""

... - Hesperiidae

... - Papilionidae

... - Apatelodidae

... - Epiplemidae

... """)

["Hesperiidae", "Papilionidae", "Apatelodidae", "Epiplemidae"]

yaml.load 函数可以接受一

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值