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\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文件,超详细讲解的更多相关文章
- Keras代码超详细讲解LSTM实现细节
1.首先我们了解一下keras中的Embedding层:from keras.layers.embeddings import Embedding: Embedding参数如下: 输入尺寸:(batc ...
- 用PHP实现一个简易版文件上传功能(超详细讲解)
1. php简化版的图片上传(没有各种验证) 1 2 3 4 <form action="" enctype="multipart/form-data" ...
- 教你用webpack搭一个vue脚手架[超详细讲解和注释!]
1.适用人群 1.对webpack知识有一定了解但不熟悉的同学. 2.女同学!!!(233333....) 2.目的 在自己对webpack有进一步了解的同时,也希望能帮到一些刚接触webpack的同 ...
- 教你用webpack搭一个vue脚手架[超详细讲解和注释!](转载)
1.适用人群 1.对webpack知识有一定了解但不熟悉的同学. 2.女同学!!!(233333....) 2.目的 在自己对webpack有进一步了解的同时,也希望能帮到一些刚接触webpack的同 ...
- Python与Javascript相互调用超详细讲解(2022年1月最新)(三)基本原理Part 3 - 通过C/C++联通
目录 TL; DR python调javascript javascript调python 原理 基于Node.js的javascript调用python 从Node调用python函数 V8 嵌入P ...
- Python与Javascript相互调用超详细讲解(四)使用PyNode进行Python与Node.js相互调用项(cai)目(keng)实(jing)践(yan)
目录 前提 安装 使用 const pynode = require('@fridgerator/pynode')的时候动态链接错误 ImportError: math.cpython-39-x86_ ...
- bootStrap-table服务器端后台分页的使用,以及自定义搜索框的实现,前端代码到数据查询超详细讲解
关于分页,之前一直纯手写js代码来实现,最近又需要用到分页,找了好多最终确定bootstrap-table,正好前端页面用的是bootstrap. 首先下载BootStrap-table的js和CSS ...
- freemaker超详细 讲解 配置
一.FreeMarker简介 二.第一个FreeMark示例 2.1.新建一个Maven项目 2.2.添加依赖 2.3.添加存放模板的文件夹 2.4.添加模板 2.5.解析模板 2.6.运行结果 三. ...
- RAID技术超详细讲解
RAID 技术是一种多磁盘技术,面对数据的各方面有着两面性的影响,整体来说优点大于缺点的,下面我将详细介绍一下 RAID ,简称磁盘阵列技术. 一.RAID 概述 1988 年美国加州大学伯克利分校的 ...
随机推荐
- Postman接口测试学习笔记
1.postman界面 下载安装postman工具,以下是postman的界面 快捷区:提供常用的操作入口,新建请求,执行器,导入别人共享的收藏夹测试数据,包括运行收藏夹的一组测试数据: 侧边栏:搜索 ...
- Java判断字符串是否为空
我们常常在实际开发调用一些类库,或者本身框架里面有类库去实现判断字符串空的操作,但是某些场景下上不是很方便去引入外部库的,所以需要我们自己去做这个工作,事实上判断空的操作不是很复杂,所以做个记录. 空 ...
- Django正向解析和反向解析
转载:https://blog.csdn.net/jeekmary/article/details/79673867 先创建一个视图界面 urls.py index.html index页面加载的效果 ...
- 【GBK、UTF-8、ISO8859-1】三种编码方式总结及实例
感谢:https://blog.csdn.net/youngstar70/article/details/64117297 一.总结 在Java中,String的getBytes()方法是得到一个操作 ...
- python标准库:ftplib模块
ftplib模块包含了文件传输协议(FTP)客户端的实现. 下面的例子展示了如何登入和获取进入目录的列表,dir函数传入一个回调函数,该回调函数在服务器相应时每一行调用一次.ftplib模块默认的回调 ...
- derby常用语法
derby常用语法 以user表为例: 1.创建表 create table user (id int primary key,account varchar(5),name varchar(5),p ...
- ConxtMenu高级用法
##背景我们经常在列表的页面中,点击列表中的行,一般进入详情页面,长按列表中一行,会弹出一个菜单,包含了对某一行的操作(编辑.删除等等),也知道通常的用法: 0x01. 在Activity中注册需要上 ...
- 自研测试框架ktest介绍(适用于UI和API)
iTesting,爱测试,爱分享 在自动化测试的过程中,测试框架是我们绕不过去的一个工具,无论你是不需要写代码直接改动数据生成脚本,还是你需要检查测试结果甚至持续集成,测试框架都在发挥它的作用. 不同 ...
- Hexo next主题安装algolia
一直在使用hexo写自己的博客,最近博客刚刚搬家重新搞了下博客: 1.为hexo添加站内搜索 我用的是algolia,在next主题5.x以上的版本集成了algolia站内搜索功能,我们只需要简单的配 ...
- js大作业(0)
DAY1:在看HTML5游戏开发实战.手写了一遍乒乓球.自己玩了半小时.实话讲,和本科学的MFC差别不大.通过setInterval函数获取用户的输入 从而允许多用户操作.parseInt把字符串化为 ...