Yaml文件,超详细讲解

Posted poloyy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Yaml文件,超详细讲解相关的知识,希望对你有一定的参考价值。

YAML文件简单介绍

  • YAML 是一种可读性非常高,与程序语言数据结构非常接近。同时具备丰富的表达能力和可扩展性,并且易于使用的数据标记语言。
  • YAML全称其实是"YAML Ain‘t a Markup Language"(YAML不是一种标记语言)的递归缩写,所以它强调的是数据本身,而不是以标记为重点

 

为什么要使用YAML文件?

其实YAML文件也是一种配置文件,但是相较于ini,conf配置文件来说,更加的简洁,操作简单,还能存放不同类型的数据;而像ini存储的值就都是字符串类型,读取之后还要手动转换

 

YAML的基本语法规则

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格。(可以将你的ide的tab按键输出替换成4个空格)
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • #表示注释

 

YAML支持的数据结构

  • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
  • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
  • 纯量(scalars):单个的、不可再分的值

 

YAML,对象数据类型

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

animal: dogs

转换成Python数据结构,如下:

{animal: dogs}

 

将所有键值对赋值。

hash: { name: Steve, foo: bar }

转换成Python数据结构,如下:

{‘hash: {name: Steve, foo: bar}}

 

将列表赋值

lists : [1,2,3]

转换成Python数据结构,如下:

{lists: [1, 2, 3]}

 

将元组赋值

tuples : (1,2,3)

转换成Python数据结构,如下:

{tuples: (1,2,3)}

 

总结

  • 当赋值列表、键值对时,转换成Python数据结构是可以直接当列表、字典使用的;、
  • 当赋值元组时,转换后也是字符串
  • 最终输出的都是字典类型,可以通过key获取对应的值

 

YAML,数组

这里说的数组结构跟 [1,2,3,4] 不太一样,如下:

cool_list:
  - 10
  - 15
  - 12

hard_list:
  - {key: value}
  - [1,2,3]
  - test:
      - 1
      - 2
      - 3

twice_list:
  -
    - {a: b}
    - {c: d}
    - {e: f}

转换成Python数据结构,如下:

cool_list: [10, 15, 12], 
hard_list: [
    {key: value}, 
    [1, 2, 3], 
    {
        test: [1, 2, 3]
    }
],
twice_list: [
    [
        {a: b}, 
        {c: d}, 
        {e: f}
    ]
]

 

总结

当你写成下面这种数据结构时 ,也会自动转成字典类型,如: {key: value,val2} 

key:
    value,val2

 

YAML,纯量

纯量是最基本的、不可再分的值;类似基本数据类型

  • 字符串
  • 布尔值
  • 整数
  • 浮点数
  • 时间
  • 日期
  • Null
int: 12
float: 12.3
string: pets
bool: true
None: null
time: 2001-12-14t21:59:43.10-05:00
date: 2018-03-21

执行结果

{
   int: 12, 
   float: 12.3, 
   string: pets, 
   bool: True, 
   None: None, 
   time: datetime.datetime(2001, 12, 14, 21, 59, 43, 100000, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=68400))), 
   date: datetime.date(2018, 3, 21)
}

包含知识点

  • 时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区
  • 日期必须使用ISO 8601格式,即 yyyy-MM-dd 
  • bool类型:true,True,false,False都可以
  • 可以用 ~ 表示 null  

 

 

YAML,字符串详解

  • 字符串是最复杂,但是又最常见的一种数据类型。
  • 字符串默认不使用引号 ‘‘   "" 包裹着

基础写法

str: 这是一行字符串

转换成Python数据结构,如下:

{str: 这是一行字符串}

 

什么情况下要用引号?当字符串包含了空格or特殊字符

str_s: "字符串包含 空格&特殊字符!@#$%^&*()"

转换成Python数据结构,如下:

{str_s: 字符串包含 空格&特殊字符!@#$%^&*()}

 

要注意的是,双引号 "" 不会对特殊字符转义

str1: test
1
str2: "test
2"

转换成Python数据结构,如下:

{str1: test\n1, str2: test
2}

 

可以拆分多行,每一行就是一个空格,但是要注意他们的层级必须一致

st_string: hello
           world

 

转换成Python数据结构,如下:

{
   st_string: hello world
}

 

 

YAML,类型强转

YAML 允许使用两个感叹号,强制转换数据类型

is: !!str 123
sf: !!float 12.22
si: !!int 222

执行结果如下

{
  is: 123, 
  sf: 12.22, 
  si: 222
}

 

以上是关于Yaml文件,超详细讲解的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 260 只出现一次的数字(超详细)

【HDFS】超详细讲解Erasure Coding-- EC架构及图解相关核心代码。

超详细讲解C语言文件操作!!

nginx配置文件nginx.conf超详细讲解

nginx配置文件nginx.conf超详细讲解

文件操作的这些知识你学到了吗?画图+文字超详细讲解