生活
YAML 、yaml教程
2023-04-02 16:06  浏览:33

yaml文件使用

YAML 入门教程

参考:

python读取yaml文件

Python常用配置文件ini、json、yaml读写总结

读取yaml文件(数组用下标[x],字典用[key])

编写一个py文件,读取yaml文件,yaml文件需要通过safe_load方法转换成字典格式,然后再通过字典取值的方式获得值。

在目录下创建test3.yaml文件

在目录下创建test3_fz.yaml文件

python读取实现:

参考:

python txt文件常用读写操作

利用Python从文件中读取字符串(解决乱码问题) Python - chardet自动检测字符编码

yaml基本语法

YAML:YAML Ain't Markup Language,即YAML不是标记语言。不过,在开发的这种语言时,YAML的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)

YAML是一个可读性高的用来表达资料序列的格式。YAML参考了其他多种语言,包括:XML、C语言、 Python、Perl以及电子邮件格式RFC2822等。Clark Evans在2001年在首次发表了这种语言,另外Ingy döt Net与Oren Ben-Kiki也是这语言的共同设计者,目前很多最新的软件比较流行采用此格式的文件存放配置信息,如:ubuntu,ani***le,docker,kubernetes等

YAML 官方网站:

ansible 官网:

yaml语言特性归纳如下

1、大小写敏感

2、使用缩进表示层级关系

3、***止使用tab缩进,只能使用空格键

4、缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级

5、使用#表示注释

6、字符串可以不用引号标注

YAML 支持以下常用几种数据类型:

key对应value

标量是最基本的,不可再分的值,包括:

字典由多个key与value构成,key和value之间用 :分隔, 并且 : 后面有一个空格,所有k/v可以放在一行,或者每个 k/v 分别放在不同行

格式:

使用缩进方式

范例:

列表由多个元素组成,每个元素放在不同行,且元素前均使用"-"打头,并且 - 后有一个空格, 或者将所有元素用 [ ] 括起来放在同一行

也可以写成以 - 开头的多行

数据里面也可以包含字典

不同行,行以-开头,后面有一个空格# A list of tasty fruits

范例:YAML 表示一个家庭

XML:Extensible Markup Language,可扩展标记语言,可用于数据交换和配置

JSON:Javascript Object Notation, Javascript 对象表记法,主要用来数据交换或配置,不支持注释

YAML:YAML Ain't Markup Language YAML 不是一种标记语言, 主要用来配置,大小写敏感,不支持tab

python——Yaml

1.安装

2.yaml文件的格式

a)键值对形式

b)序列list

c)纯量str

d)强制转换,使用!!

e)多个文件:一个yaml文件里存在多个文件,用---表示,只能一起读取,不能分开读取

3.yaml文件的读取xx.yaml

4.yaml文件的写入

5.yaml文件的持续写入

6.Template修改yaml中的变量

source.yaml

Read_yaml.py

※ 问题:1.含有多个文件的yaml文件,读取出来如何选择?

2.持续写入能否将新写入的文件变成新的文件结构? ※

PS:觉得这篇文章有用的朋友,多多点赞打赏哦~!

YAML是干啥的

这是2021年第27篇随笔,全文268字。

3月的第8篇。

3月计划跟2月一样,随笔8/9篇

最近工作中,总看到yaml文件,yaml后缀名。

觉得有必要去深入理解一下。

如果百度一搜,搜出来yaml菜鸟入门,一看,里面长篇大论也没有告诉我yaml是干嘛的。

于是更换关键字“yaml是干嘛用的”

出来的内容就如我所求。

题外话:

知识是用来使用的。所以需要找到自己需要的知识,时间有限。

原文来自知乎大牛

我的收获对yaml更深的理解是:

yaml是专门用来写配置文件的。

yaml文件是用来写kubernetes部署时需要的:资源清单的文件。

yaml文件语法很简单,只包含列表和字典-键值对。

Yaml文件

在我们的kubernetes中,你只需要两种结构类型就行了:

1、Lists

2、Maps

也就是说,你可能会遇到Lists的Maps和Maps的Lists,等等。不过不用担心,你只需要掌握了这两种结果也就可以了,其他更加复杂的我们暂且不讨论。

首先我们来看看Maps,我们都知道Map是字典,就是一个key:value的键值对,Maps可以让我们更加方便的去书写配置信息,例如:

***行的---是分隔符,是可选的,在单一文件中,可连用三个连字号---区分多个文件。这里我们可以看到,我们有两个键:kind和apiVersion,它们对应的值分别是:v1和Pod。上面的YAML文件转化为json格式:

我们在创建一个相对复杂一点的YAML文件,创建一个KEY对应的值不是字符串而是一个Maps:

上面的YAML文件,metadata这个KEY对应的值就是一个Maps了,而且嵌套的labels这个KEY的值又是一个Map,可以多层嵌套。

YAML处理器是根据行缩进来知道内容之间的关联性的。比如我们上面的YAML文件,我们用了两个空格作为缩进,空格数量并不重要,但是你得保持一致,并且至少要求一个空格。

我们可以看到name和labels是相同级别的缩进,所以YAML处理器就知道了他们属于同一个Map,而app是labels的值是因为app的值缩进更大。

同样的我们转化为json格式:

Lists就是列表,说白就是数组,在Yaml文件中我们可以这样定义:

你可以有任何数量的项在列表中,每个项的定义以破折号(-)开头的,与父元素直接可以缩进一个空格。转化为json格式:

当然,lists的子项可以是map,maps的子项也可以是lists:

比如这个YAML文件,我们定义了一个叫containers的Lists对象,每个子项都由name,image,ports组成,每个ports都有一个key为containerPort的Map组成,转换为json格式:

使用YAML文件来创建一个Deployment吧。

API 说明:

这是普通的POD文件:

* apiVersion,这里的值是v1,这个版本号需要根据我们安装的kubernetes版本和资源类型进行变化的,记住不是写死的

* kind,这里我们创建的是一个pod,当然根据你的实际情况,这里资源类型可以是Deployment,Job,Ingress,Service等。

* medatada:包括了我们定义的Pod的一些meta信息,比如名称,namespace,标签等等信息。

* spec:包括一些containers,storage,volumes,或者其他Kubernetes需要知道参数,以及诸如是否在容器失败时重新启动容器的属性。你可以在待定kubernetes API找到完整的Kubernetes pod属性。

典型的容器的定义:

这是一个最小的定义: 一个名字(front),基于nginx镜像,以及容器将会监听一个端口80。在这些中,只有名字是非常重要的,你也可以指定一个更加复杂的属性,例如容器启动时运行的命令,应使用的参数,工作目录,或每次实例化时是否拉取镜像的新副本。以下是容器可设置的属性:

我们将上面创建的POD的YAML文件保存成一个pod.yaml。然后使用kubectl创建POD:

我们就可以使用我们前面比较熟悉的kubectl命令来查看POD状态了:

创建遇到问题,可以使用kubectl describe 进行排查。我们先删除上面创建的POD:

现在我们可以来创建一个真正的Deployment。在上面的例子中,我们只是单纯的创建一个POD实例,但是如果这个POD出现了故障的话,我们的服务也就挂掉了,所以kubernetes提供了一个Deployment的概念,可以让kubenetes去管理一组POD的副本,也就是副本集,这样可以保证一定数量的副本一直可用的,不会因为一个POD挂掉导致整个服务挂掉。我们这样定义一个Deployment:

注意这里的apiVersion对应的值是apps/v1,当然kind要指定为Deployment,因为这就是我们需要的,然后我们可以知道一些meta信息,比如名字,或者标签之类的。最后,最重要的是spec配置选项,这里我们定义需要两个副本,当然还有很多可以设置的属性,比如一个Pod在没有任何错误变成准备的情况下必须达到的最小秒数。

我们可以在 Kubernetes v1beta1 API 参考中找到一个完整的 Depolyment 可指定的参数列表。

现在我们来定义一个完整的 Deployment 的 YAML 文件:

和pod.yaml文件很类似。注意其中的template,其实就是对POD对象的定义。将deployment.yaml创建:

查看状态:

可以使用 去检验 YAML 文件的合法性。

YAML 文件介绍

YAML 是一种可读性非常高,与程序语言数据结构非常接近。同时具备丰富的表达能力和可扩展性,并且易于使用的数据标记语言。

YAML是 "YAML Ain't a Markup Language"(YAML不是一种标记语言)的递归缩写。

这么命名的方式,表示 YAML 强调的不是标记,而是数据本身。

YAML 参考了其他多种语言,包括:XML、C语言、Python、Perl 以及电子邮件格式 RFC2822。

YAML 发布与 2001 年,之前并不出名,现在逐渐开始流行。测试圈中,主要应用于自动化测试过程,用来进行数据驱动的数据存储载体。

基本语法规则(很接近 Python 的语法规则):

支持的数据格式:

以下是 YAML 数据格式的示例:

对象

转换为Python字典格式为

YAML也支持另一种对象的写法,将所有的键值对写成一个行内对象

转换为Python字典格式为

数组

一组连词线开头的行,构成一个数组

转换为Python

也可以通过缩进空格来表示多维数组

转换为Python的列表

当然,也可以采用行内表示法

转换为Python

纯量

纯量是最基本的、不可再分的值。 以下数据类型都是常见的纯量。

纯量一般表示如下

转换为Python

yaml 文件通过 pyyaml 库转换后就是 Python 中对应的数据类型。直接进行操作即可,相较从 excel 中读取数据全部是字符串的方式来说,处理更方便。相对于 json 格式,可读性更高。

关于YAML和yaml教程的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

发表评论
0评