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. Promise的用法(js&java)

    Promise(onsuccess , on fail) f1.then(f2.then(), f3.then()) java CompletableFuture.thenAccept

  2. [LC] 303. Range Sum Query - Immutable

    Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive ...

  3. stack|session|fuss|anniversary

    N-COUNT A stack of things is a pile of them. 摞; 堆 例: There were stacks of books on the bedside table ...

  4. 谁来破解公交WiFi的尴尬困局?

      在咖啡馆.饭店坐定,菜单可以待会再看,远远看见服务员迎上来,赶紧先问一句:"这里有无线网吗,密码是多少",和笔者一样养成类似习惯的人越来越多.所以,当公交WiFi"大 ...

  5. Java Design Patterns(2)

    1.Factory Design pattern 工厂设计模式的优点 (1)工厂设计模式提供了接口而不是实现的代码方法. (2)工厂模式从客户端代码中删除实际实现类的实例化.工厂模式使我们的代码更健壮 ...

  6. 算法拾遗[4]——STL用法

    主要bb一下优先队列和字符串吧. 哦还有 bitset. 优先队列 定义很容易: priority_queue<int> pq; 内部是一个堆. 基本操作 pq.top() 取堆顶元素; ...

  7. 广州CVTE招聘-测试开发工程师

    内推邮箱:keweisheng@cvte.com 地点:广州 公司简介 CVTE成立于2005年,总部位于广州科学城,旗下设有多家独立的子公司,在香港设有全球服务中心,在国内设有21个营销服务中心和近 ...

  8. 微软手机 能靠Surface Phone卷土重来吗?

    能靠Surface Phone卷土重来吗?" title="微软手机 能靠Surface Phone卷土重来吗?"> 就算整体大环境再好,就算是站在风口之上,也总是 ...

  9. flume install

    flume install flume 安装 123456 [root@10 app][root@10 app]# mv apache-flume-1.7.0-bin /mnt/app/flume[r ...

  10. 线程sleep,wait,notify,join,yield方法解析

    线程的五种状态 线程从创建到销毁一般分为五种状态,如下图: 1) 新建 当用new关键字创建一个线程时,就是新建状态. 2) 就绪 调用了 start 方法之后,线程就进入了就绪阶段.此时,线程不会立 ...