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\n1'
str2: "test\n2"

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

{'str1': 'test\\n1', 'str2': 'test\n2'}

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

st_string: hello
           world

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

{
   'st_string': 'hello world'
}

YAML,类型强转

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

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

执行结果如下

{
  ',
  'sf': 12.22,
  'si': 222
}

Yaml文件,超详细讲解的更多相关文章

  1. Keras代码超详细讲解LSTM实现细节

    1.首先我们了解一下keras中的Embedding层:from keras.layers.embeddings import Embedding: Embedding参数如下: 输入尺寸:(batc ...

  2. 用PHP实现一个简易版文件上传功能(超详细讲解)

    1. php简化版的图片上传(没有各种验证) 1 2 3 4 <form action="" enctype="multipart/form-data" ...

  3. 教你用webpack搭一个vue脚手架[超详细讲解和注释!]

    1.适用人群 1.对webpack知识有一定了解但不熟悉的同学. 2.女同学!!!(233333....) 2.目的 在自己对webpack有进一步了解的同时,也希望能帮到一些刚接触webpack的同 ...

  4. 教你用webpack搭一个vue脚手架[超详细讲解和注释!](转载)

    1.适用人群 1.对webpack知识有一定了解但不熟悉的同学. 2.女同学!!!(233333....) 2.目的 在自己对webpack有进一步了解的同时,也希望能帮到一些刚接触webpack的同 ...

  5. Python与Javascript相互调用超详细讲解(2022年1月最新)(三)基本原理Part 3 - 通过C/C++联通

    目录 TL; DR python调javascript javascript调python 原理 基于Node.js的javascript调用python 从Node调用python函数 V8 嵌入P ...

  6. Python与Javascript相互调用超详细讲解(四)使用PyNode进行Python与Node.js相互调用项(cai)目(keng)实(jing)践(yan)

    目录 前提 安装 使用 const pynode = require('@fridgerator/pynode')的时候动态链接错误 ImportError: math.cpython-39-x86_ ...

  7. bootStrap-table服务器端后台分页的使用,以及自定义搜索框的实现,前端代码到数据查询超详细讲解

    关于分页,之前一直纯手写js代码来实现,最近又需要用到分页,找了好多最终确定bootstrap-table,正好前端页面用的是bootstrap. 首先下载BootStrap-table的js和CSS ...

  8. freemaker超详细 讲解 配置

    一.FreeMarker简介 二.第一个FreeMark示例 2.1.新建一个Maven项目 2.2.添加依赖 2.3.添加存放模板的文件夹 2.4.添加模板 2.5.解析模板 2.6.运行结果 三. ...

  9. RAID技术超详细讲解

    RAID 技术是一种多磁盘技术,面对数据的各方面有着两面性的影响,整体来说优点大于缺点的,下面我将详细介绍一下 RAID ,简称磁盘阵列技术. 一.RAID 概述 1988 年美国加州大学伯克利分校的 ...

随机推荐

  1. 由情感计算带来的惊喜发现——记Rosalind W. PICARD“21世纪的计算”大会主题演讲

    W. PICARD"21世纪的计算"大会主题演讲" title="由情感计算带来的惊喜发现--记Rosalind W. PICARD"21世纪的计算& ...

  2. python学习笔记(6)数据类型-集合

    集合(set)是一个无序的不重复元素序列. 可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典. 创建格 ...

  3. 框架之MyBatis

    什么是框架,简单的来说框架就是一个程序的半成品,而我们就是的工作就是根据我们的工作需要将其完善.MyBatis框架的作用就是将我们使用JDBC操作数据库的过程移交给MyBatis,让它来帮我们完成这些 ...

  4. 第一课 安装wamp环境

    1.准备 怎样选择PHP的版本 IIS 如果想使用IIS配置PHP的话,那么需要选择Non-Thread Safe(NTS)版本的PHP Apache 如果你是用的Apache的版本来自Apache ...

  5. javaweb_forQuery

    http://how2j.cn/k/tmall_ssm/tmall_ssm-1516/1516.html 总体思路 使用springMVC+spring+mybatis的方式打通表现层/业务层/持久层 ...

  6. one note使用

    one note 插件及使用 https://sspai.com/post/46957 one note空间大小限制 https://www.jianshu.com/p/5232510fd165

  7. Ajax 请求参数过多导致 400 错误 and BCryptPasswordEncoder 加密判断

    2019/06/19 先分享一种密码加密方式: Spring Security 提供了 BCryptPasswordEncoder类, 实现Spring的PasswordEncoder接口使用BCry ...

  8. Hell World:)

    第一次弄博客是在2017年春节,自己弄了个域名,租了个小小的VPS,装好了wordpress,挑了一套模板,就这样上线了,可惜wordpress实在不是一个适合写字的地方,插件.主题令人眼花缭乱,慢慢 ...

  9. 使用GitBook编写项目文档

    GitBook简介 GitBook 是使用 GitHub / Git 和 Markdown(或AsciiDoc)构建漂亮书籍的命令行工具(和Node.js库): GitBook 可以将您的内容作为网站 ...

  10. zabbix监控mysql数据库信息脚本

    ---恢复内容开始--- 在/usr/local/zabbix/etc/zabbix_agentd.conf增加 # 获取mysql性能指标 UserParameter=mysql.status[*] ...