关于yaml

YAML语言的设计目标,就是方便人类读写。如果你想要实现一些用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,您可以访问下面的链接获得,欢迎star该代码仓库。

代码地址

python生成yaml文件_Python实践34-读写yaml文件相关推荐

  1. python生成whl包_python之PypI打包whl文件

    一.简单介绍 python中我们经常会用到第三方的包作为工具,比如爬虫解析工具,网络请求工具等.之所以要把它封装成包,意识为了技术与业务分离,二是为了能多 项目多平台共用.python里面用到的第三方 ...

  2. Python编程从入门到实践 第十章:文件和异常 练习答案记录

    Python编程从入门到实践 第十章:文件和异常 练习答案记录 练习题导航 Python编程从入门到实践 第十章:文件和异常 练习答案记录 10.1 从文件中读取数据 10.1.1 读取整个文件 10 ...

  3. python生成word目录_Python 文件与目录操作方法总结

    Python 有很多内置的模块和函数可用于文件的操作处理,这些函数都分布在几个模块上:如 os,os.path,shutil 和pathlib 等等.本文收集了许多您需要知道的函数,以便在 Pytho ...

  4. python读取docx的内容输出_Python应用 , 读写docx文件!

    字处理软件是平时办公必备的同时也是最常用的软件之一,而字处理软件用的最多最频繁的就是微软的word,其扩展名为docx.在日常工作中,可能需要对很多的docx文件进行批处理,例如教师在批阅学生提交的电 ...

  5. android读取本地yaml文件_python笔记11-读取yaml配置文件(pyyaml)

    YAML简介 YAML 是一种较为人性化的数据序列化语言,可以配合目前大多数编程语言使用. YAML 的语法比较简洁直观,特点是使用空格来表达层次结构,其最大优势在于数据结构方面的表达,所以 YAML ...

  6. python生成html报表_python生成HTMl报告(unittest)

    放在*\python3\script 或者放在当前项目文件夹下 亦或者在python35下的lib文件夹下 (注意最好放在根目录下) from HTMLTestRunner import HTMLTe ...

  7. python导入mat文件_python读取并写入mat文件的方法

    先给大家介绍下python读取并写入mat文件的方法 用matlab生成一个示例mat文件: clear;clc matrix1 = magic(5); matrix2 = magic(6); sav ...

  8. python生成字符画_Python生成字符画 | 文艺数学君

    摘要这一篇文章介绍使用Python生成字符画的方式. 会给出简单的原理介绍和实现的方式. 最后会给出源代码的链接地址. 简介 这一篇介绍一下使用Python来进行字符画的生成. 这里会介绍一下生成的步 ...

  9. python保存数据到本地文件_python保存数据到本地文件的方法

    python保存数据到本地文件的方法 1.保存列表为.txt文件 #1/list写入txt ipTable = ['158.59.194.213', '18.9.14.13', '58.59.14.2 ...

最新文章

  1. socket编程报异常java.io.EOFException
  2. MyEclipse6.0下代码提示(alt+/)无法使用的解决方法
  3. Allegro跨分割检查
  4. (6)nginx:rewrite
  5. python每个字符后添加空格_python实现指定字符串补全空格的方法
  6. sparseTM的公式理解
  7. 一文读懂Http Headers为何物(超详细)
  8. hihocoder#1513 : 小Hi的烦恼
  9. C++ Primer Plus 第二章编程练习
  10. Algs4-2.1.8元素有三种值时插入排序的复杂度
  11. Es6语法实现的转盘抽奖效果——可配置转盘的抽奖概率
  12. 大规模机器学习:将数据科学引入生产系统架构的典型模式
  13. Kafka配置JAAS
  14. Max(TM)仓库管理系统v2.0.5.1网络版
  15. 安平仓管王 5000xp v2.9 免费下载
  16. 安卓屏幕朗读app_安卓车机后装苹果CarPlay盒子的自动化分享
  17. QThread 的使用
  18. 【纯java语言做RPG游戏】4.用XML导入NPC并与NPC对话
  19. 华尔街日报:雅虎站在移动互联网时代悬崖边
  20. mini计算机结构,简单拆机看内部构造_苹果 Mac mini MGEN2CH/A_台式电脑评测-中关村在线...

热门文章

  1. c语言里 如何取得线程的lpparameter'参数,请问线程函数如何访问对话框类中的变量...
  2. 【RK3399Pro学习笔记】十三、ROS中的坐标系管理系统
  3. 小程序 获取当前用户地址及地图显示
  4. 如何解决Mybatis里mapper文件中关于不能用大于小于号
  5. 输出一个等边三角形(由*拼接),实心或空心,连长为n
  6. [Windowns C]递归遍历指定目录下的子目录和文件
  7. [Oracle]使用滚动游标
  8. js上传文件;input上传文件;
  9. 什么是跨域?跨域如何解决
  10. React开发(155):请求方式得问题