专业的编程技术博客社区

网站首页 > 博客文章 正文

一种比Xml更敏捷的配置方式,Python Yaml 配置文件解析模块详解

baijin 2024-08-31 16:02:58 博客文章 3 ℃ 0 评论

为什么选择Yaml

  • Yaml的可读性好、扩展性好。
  • Yaml和脚本语言的交互性好。
  • Yaml使用实现语言的数据类型。
  • Yaml有一个一致的信息模型。
  • Yaml易于实现。

Yaml试图用一种比Xml更敏捷的方式,来完成Xml所完成的任务。


Yaml 支持的三类数据结构

对象:键值对的集合,又称为映射(mapping)、 哈希(hashes)、 字典(dictionary)。键值对用冒号 “:” 结构表示,“:”与值之间需用空格分隔。

示例如下:

数组:一组按次序排列的值,又称为序列(sequence) 、列表(list)。数组前加有 “-” 符号,“-”与值之间需用空格分隔。

示例如下:

纯量:纯量是最基本的,不可再分的值。字符串、整型、浮点型、布尔型、NULL、时间、日期。 None值可用null或“~”表示。

示例如下:


Yaml 基本语法规则

  • 大小写敏感。
  • 使用缩进表示层级关系,缩进时不允许使用Tab键,只允许使用空格。
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可。
  • # 表示注释,# 需在行首。
  • 如果字符串没有空格或特殊字符,不需要加引号,但如果其中有空格或特殊字符,则需要加单引引号。注意单引号和双引号的区别,单引号中的特殊字符转到Python会被转义,也就是到最后是原样输出了,双引号不会被Python转义。

Yaml 特殊语法规则

  • 引用,“&”用来建立锚点,并指定锚点的名字,例如 &price,“* ”用来引用锚点,例如 *price。<< 表示合并到当前数据,例如 <<: *common,另外 << 合并的功能,如果有多个锚点在一起合并被引用的时候,是最先引用的变量会覆盖后引用的变量。示例如下:

示例如下:

  • 格式强制转换,yaml可以用两个感叹号来表示强制转换,如,!!str 表示强制转换为字符串;!!int 表示强制转换为整型;!!float 表示强制转换为浮点类型;!!bool 表示强制转换为布尔类型;!!null 空值;!!set 集合;!!omap / !!pairs 键值列表 / 对象列表。

示例如下:


一个“综合体”的Yaml 文件示例

其Json格式结构如下:


Python Yaml 安装

 pip install pyyaml

Python Yaml常用操作

PythonYaml有四个比较常用的用法,主要有load()、dump()、load_all()、dump_all()。这篇文章主要就是了解一下这四个方法。

yaml.load()

读取yaml文件


yaml.load_all()

多个文档在一个yaml文件,使用 --- 分隔方式来分段。如果string或文件包含几段yaml文档,你可以使用yaml.load_all来解析全部的文档,生成一个迭代器

示例如下:


yaml.dump() 写入yaml文件

yaml.dump 将一个python对象生成为yaml文档。

运行结果如下:

运行完之后,发现字典嵌套的字典,出现了大括号:{price: 17.99, release_time: 2019-7-26, special_id: 9527, status: true},这不是真正的yaml数据,不是我们想要的,如果想要集合总是以块样式表示,可以将 dump() 方法的 default_flow_style 参数值设为 False ,如下所示:

运行结果如下:


yaml.dump_all()

将多个段输出到一个文件中。

运行结果如下:

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表