python读yaml的库_Python实践34-读写yaml文件

关于yamlYAML语言的设计目标,就是方便人类读写。如果你想要实现一些用ini不好做到的配置,可以使用yaml格式作为配置文件

大小写敏感

使用缩进表示层级关系

缩进时不允许使用Tab键,只允许使用空格。

缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

yaml数据结构YAML 支持的数据结构有三种。

对象键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)

对象的一组键值对,使用冒号结构表示。

数组一组按次序排列的值,又称为序列(sequence) / 列表(list)

一组连词线开头的行,构成一个数组。

纯量(scalars)单个的、不可再分的值

包括字符串,布尔值,整数,浮点数,Null,时间,日期

一个yaml文件

name: John Smith

age: 37

spouse:

name: Jane Smith

age: 25

children:

- name: Jimmy Smith

age: 15

- name: Jenny Smith

age: 12

和它对应的json文件如下:

{ name: 'John Smith',

age: 37,

spouse: { name: 'Jane Smith', age: 25 },

children:

[ { name: 'Jimmy Smith', age: 15 },

{ name: 'Jenny Smith', age: 12 } ]

}

读写yaml文件

import yaml

if __name__ == "__main__":

with open('father.yml') as f:

content = yaml.load(f)

# output:

print(type(content))

print(content)

content.update({'age': 38})

print(content)

with open('PyYAML.yml', 'w') as nf:

yaml.dump(content, nf)

生成的新yaml文件形式如下:

age: 38

children:

- {age: 15, name: Jimmy Smith}

- {age: 12, name: Jenny Smith}

name: John Smith

spouse: {age: 25, name: Jane Smith}

仔细一看,跟原yaml文件不像嘛,尤其是几个大括号,很刺眼,这可怎么办?

使用ruamel.yaml代替PyYAML解决方法就是使用ruamel.yaml代替PyYAML,因为PyYAML貌似已经不再维护了

安装:pip install ruamel.yaml

使用ruamel.yaml库里面函数参数Loader=ruamel.yaml.RoundTripLoader和Dumper=ruamel.yaml.RoundTripDumper可以用来保持新生成的yaml文件的表现和输入文件一致。代码如下:

from ruamel import yaml

if __name__ == "__main__":

with open('father.yml') as f:

content = yaml.load(f, Loader=yaml.RoundTripLoader)

# output:

print(type(content))

print(content)

content.update({'age': 38})

print(content)

with open('ruamel.yml', 'w') as nf:

yaml.dump(content, nf, Dumper=yaml.RoundTripDumper)

生成新的yaml文件形式如下,正是我们期望的格式:

name: John Smith

age: 38

spouse:

name: Jane Smith

age: 25

children:

- name: Jimmy Smith

age: 15

- name: Jenny Smith

age: 12

代码下载

本系列文章和代码已经作为项目归档到github,仓库地址:jumper2014/PyCodeComplete。大家觉得有帮助就请在github上star一下,你的支持是我更新的动力。什么?你没有github账号?学习Python怎么可以没有github账号呢,快去注册一个啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值