一:什么是yaml

yaml的英文名称是Yet Another Markup Language,直译过来就是标记语言。yaml用的比较多的地方就是写配置文件,比如yaml配置文件在Kubernetes用的就非常广泛,学Kubernetes必须要先学yaml文件格式。

先简单的介绍一下yaml的基本语法:

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格。
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • #表示注释,从这个字符一直到行尾,都会被解析器忽略,这个和python的注释一样

二:安装pyyaml

pyyaml是python的第三方库,需要自己手动安装才能使用

pip install pyyaml

本次安装的是pyyaml的6.0版本

三:pyyaml的使用

1,读取yaml文件

先看看已经准备好的yaml文件

一级标题:二级标题1:b:1c:2a:3二级标题2:f:7t:8z:9

用yaml的load方法来加载一个yaml文件流,返回的是一个json对象

import yamlwith open('./file.yaml', 'r', encoding='utf-8') as f:data = yaml.load(stream=f, Loader=yaml.FullLoader)print(data)

运行结果如下:

对于初学python的同学其实第一手资料最好查看模块对于自家方法以及属性的说明,怎么查看help呢,以上面的load方法为例,help('yaml.load')会显示出该方法的说明文档

root@ubuntu:~# python3
Python 3.4.3 (default, Nov 12 2018, 22:25:49)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import yaml
>>>
>>> help('yaml.load')

其说明文档如下:

2,写入yaml文件

with open('./data_yaml.yaml', 'w', encoding='utf-8') as f:yaml.dump(data=data, stream=f, allow_unicode=True, sort_keys=False, indent=4)

其写入的文件如下:

3,dump_all的使用

如果要将多个Python对象序列化到一个YAML流中,可以使用 yaml.dump_all 函数。该函数接受一个Python的列表或者生成器对象作为第一个参数,表示要序列化的多个Python对象

>>> obj = [{'name': 'bob', 'age': 19}, {'name': 20, 'age': 23}, {'name': 'leo', 'age': 25}]
>>> print(yaml.dump_all(obj))
{age: 19, name: bob}
--- {age: 23, name: 20}
--- {age: 25, name: leo}

   yaml.dump 和 yaml.dump_all 方法还支持多个关键字参数,用来指定生成的YAML流中YAML文档的样式和是否包含其他信息。下面就来详细介绍下每个参数的含义和用法

stream

指定由于输出YAML流的打开的文件对象。默认值为 None,表示作为函数的返回值返回。

default_flow_style

是否默认以流样式显示序列和映射。默认值为 None,表示对于不包含嵌套集合的YAML流使用流样式。设置为 True 时,序列和映射使用块样式。

default_style

默认值为 None。表示标量不使用引号包裹。设置为 '"' 时,表示所有标量均以双引号包裹。设置为 "'" 时,表示所有标量以单引号包裹。

canonical

是否以规范形式显示YAML文档。默认值为 None,表示以其他关键字参数设置的值进行格式化,而不使用规范形式。设置为 True 时,将以规范形式显示YAML文档中的内容。

indent

表示缩进级别。默认值为 None, 表示使用默认的缩进级别(两个空格),可以设置为其他整数。

width

表示每行的最大宽度。默认值为 None,表示使用默认的宽度80。

allow_unicode

是否允许YAML流中出现unicode字符。默认值为 False,会对unicode字符进行转义。设置为 True 时,YAML文档中将正常显示unicode字符,不会进行转义。

line_break

设置换行符。默认值为 None,表示换行符为 '',即空。可以设置为 \n、\r 或 \r\n。

encoding

使用指定的编码对YAML流进行编码,输出为字节字符串。默认值为 None,表示不进行编码,输出为一般字符串。

explicit_start

每个YAML文档是否包含显式的指令结束标记。默认值为 None,表示流中只有一个YAML文档时不包含显式的指令结束标记。设置为 True 时,YAML流中的所有YAML文档都包含一个显式的指令结束标记。

explicit_end

每个YAML文档是否包含显式的文档结束标记。默认值为 None,表示流中的YAML文档不包含显式的文档结束标记。设置为 True 时,YAML流中的所有YAML文档都包含一个显式的文档结束标记。

version

用于在YAML文档中指定YAML的版本号,默认值为 None,表示不在YAML中当中指定版本号。可以设置为一个包含两个元素的元组或者列表,但是第一个元素必须为1,否则会引发异常。当前可用的YAML的版本号为1.0、1.1 和1.2。

tags

用于指定YAML文档中要包含的标签。默认值为 None,表示不指定标签指令。可以设置为一个包含标签的字典,字典中的键值对对应各个不同的标签名和值。

4,其他方法和属性

pyyaml支持很多的对yaml文件以及yaml格式数据的操作

>>> dir(yaml)
['AliasEvent', 'AliasToken', 'AnchorToken', 'BaseDumper', 'BaseLoader', 'BlockEndToken', 'BlockEntryToken', 'BlockMappingStartToken', 'BlockSequenceStartToken', 
'CollectionEndEvent', 'CollectionNode', 'CollectionStartEvent', 'DirectiveToken', 'DocumentEndEvent', 'DocumentEndToken', 'DocumentStartEvent', 'DocumentStartToken',
 'Dumper', 'Event', 'FlowEntryToken', 'FlowMappingEndToken', 'FlowMappingStartToken', 'FlowSequenceEndToken', 'FlowSequenceStartToken', 'FullLoader', 'KeyToken', 
 'Loader', 'MappingEndEvent', 'MappingNode', 'MappingStartEvent', 'Mark', 'MarkedYAMLError', 'Node', 'NodeEvent', 'SafeDumper', 'SafeLoader', 'ScalarEvent', 
 'ScalarNode', 'ScalarToken', 'SequenceEndEvent', 'SequenceNode', 'SequenceStartEvent', 'StreamEndEvent', 'StreamEndToken', 'StreamStartEvent', 
 'StreamStartToken', 'TagToken', 'Token', 'UnsafeLoader', 'ValueToken', 'YAMLError', 'YAMLLoadWarning', 'YAMLObject', 'YAMLObjectMetaclass', 
 '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', '__with_libyaml__',
 '_warnings_enabled', 'add_constructor', 'add_implicit_resolver', 'add_multi_constructor', 'add_multi_representer', 'add_path_resolver', 'add_representer',
 'compose', 'compose_all', 'composer', 'constructor', 'dump', 'dump_all', 'dumper', 'emit', 'emitter', 'error', 'events', 'full_load', 'full_load_all', 'io', 
 'load', 'load_all', 'load_warning', 'loader', 'nodes', 'parse', 'parser', 'reader', 'representer', 'resolver', 'safe_dump', 'safe_dump_all', 'safe_load', 
 'safe_load_all', 'scan', 'scanner', 'serialize', 'serialize_all', 'serializer', 'tokens', 'unsafe_load', 'unsafe_load_all', 'warnings']

详解Python的pyyaml模块相关推荐

  1. python中heapq的库是什么_详解Python中heapq模块的用法

    详解Python中heapq模块的用法 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  详解Python中heapq模块的用法.txt ] (友情提示:右键点上行t ...

  2. 用于生成随机数的python标准库模块是_详解Python基础random模块随机数的生成

    详解Python基础random模块随机数的生成 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  详解Python基础random模块随机数的生成.txt ] ( ...

  3. python random库生成伯努利随机数的方法_详解Python基础random模块随机数的生成

    随机数参与的应用场景大家一定不会陌生,比如密码加盐时会在原密码上关联一串随机数,蒙特卡洛算法会通过随机数采样等等.Python内置的random模块提供了生成随机数的方法,使用这些方法时需要导入ran ...

  4. python中re模块的span,详解Python正则表达式re模块

    正则是处理字符串最常用的方法,我们编码中到处可见正则的身影. 正则大同小异,python 中的正则跟其他语言相比略有差异: 1.替换字符串时,替换的字符串可以是一个函数 2.split 函数可以指定分 ...

  5. python哪里下载import包-详解python中的模块及包导入

    python中的导入关键字:import 以及from import 1.import import一般用于导入包以及模块. 不过有个小问题: (1)当导入的是模块的时候是可以直接可以使用模块内的函数 ...

  6. 详解Python的codecs模块

    浅析Python的codecs模块 编码转化 codecs.open() 总结 Reference 编码转化 codecs专门用作编码转换. # -*- encoding: gb2312 -*- im ...

  7. 【万字长文】详解Python时间处理模块-datetime

    datetime模块提供了用于处理日期和时间的类和对应的方法,一般用于处理年.月.日.时.分.秒的统计和计算等需求.在支持日期时间数学运算的同时,实现的关注点更着重于如何能够更有效地解析其属性用于格式 ...

  8. python twisted安装_图文详解python之twisted模块安装

    Twisted是一个事件驱动的网络框架. 最近开始学习了解Twisted,首先肯定要安装twisted模块. 但是在cmd下执行:pip install twisted 出现了下面的问题:" ...

  9. Python的PyYAML模块详解

    文章目录 注:原文链接 简介 安装 简单安装 从源码安装 最常被问到的问题 使用详解 加载YAML 转储YAML 构造.表示和解析 YAML语法 文档 块序列 块映射 流集合 标量 别名 标签 YAM ...

最新文章

  1. boost::metaparse::debug_parsing_error相关用法的测试程序
  2. Docker学习(三):镜像
  3. 《spring 2.0技术手册》的技术写作方式值得学习!
  4. 机器学习:分类算法SVM(支持向量机)
  5. Hibernate.cfg.xml 整理
  6. 一年级下册健康教育教案
  7. SQL Sever 创建视图
  8. 微信小程序的下载安装
  9. latex,希腊字母,英文花体字
  10. 步进电机的计算机控制系统设计,基于计算机并口的步进电机控制系统设计
  11. 计算机二级和英语六级什么时候出成绩,英语四六级口语考试成绩确定标准是什么?成绩何时发布?...
  12. 《摄氏华氏温度转换》
  13. py2neo.database.work.ClientError: [Procedure.ProcedureNotFound]
  14. 智能合约编译器Remix IDE
  15. 77. Combinations(组合)
  16. mongodb compact 理解
  17. 六大布局之LinearLayout
  18. 《炬丰科技-半导体工艺》湿法蚀刻工艺对铜及其合金蚀刻剂的评述
  19. 【Vivado那些事儿】Vivado中运行时出现visual c++运行错误的解决办法
  20. 如何top命令查看进程信息和cpu占用率分析

热门文章

  1. Dos安装pyinstaller时报错Non-UTF-8 code starting with '\x90' in file pip3.6.exe on line 1
  2. php 请求是什么请求,PHP判断一个请求是Ajax请求还是普通请求
  3. Java垃圾回收机制与垃圾收集器
  4. 找资源的网址——总结笔记一
  5. 解决海康视频插件错位以及点击页面出现闪烁的情况
  6. postman密码错误找回时没有任何反应||postman密码找回
  7. 模式识别hw2-------基于matconvnet,用CNN实现人脸图片性别识别
  8. 企业为什么需要进销存系统解决方案?
  9. 关于mysql登录不成功遇到的问题及解决方案Access denied for user ‘root‘@‘IP‘ (using password: YES)
  10. Linux应用开发之多线程