非常友善的YAML

友善且神奇的YAML

我们最近讲ansible提到了yaml,它是最近几年非常流行的一种,嗯,怎么说呢,本质是一种数据序列化的规范,使用上类似json、xml而又有所区别。

我们今天就来揭开YAML的神秘面纱。揭示其本质,与json、xml的异同,以及简单使用,为进一步编写ansible的playbook做准备。

什么是YAML

YAML在介绍自己之前,先介绍自己不是什么,YAML就是 YAML Ain’t Markup Language (YAML™),它不是标记语言,而是a data serialization language designed to be human-friendly and work well with modern programming languages for common everyday tasks。它是一种数据序列化的语言,易于人读写,能很好的与当下的编程语言的一些任务相互协作。

我们讲几个点

它不是标记语言

标记语言是什么是一种将文本以及文本相关的其他信息结合起来,展现出关于文档结构和数据处理细节的电脑文字编码。与文本相关的其他信息(包括文本的结构和表示信息等)与原来的文本结合在一起,但是使用标记进行标识。比如html、xml以及时下流行的markdown,他们用plaintext里的文本对数据结构和文档结构处理,比如html中<h1>表示一级标题,<img>表示这是一个图片;markdown中用# 表示一级标题,[]表示图片等等。简单理解 肤浅理解,用一些规定好的规范将简单的字符富文本化。其中有一些xml等进行了扩展,实现了更高层面的东西。

它是用于数据序列化

这是本质,它是专职于数据序列化的语言,用于程序之间传递数据,将数据通过yaml承载,这点也是为什么人们经常将之与json、xml相提并论的原因。但是多多少少还是有点区别的,产生的原因,侧重的领域,使用的场景其实都是有细微差别的,一会我们简单讲讲。

它易于人的读写

我们见过xml也见过json、以及html,说实话,读写困难,层级有时候不易区分。但是YAML通过缩进和一些规范,使之读写都非常方便。

它可以很好的与当下的编程语言相互协作

官网对常用的语言都做出了对接的方式,作为各类语言内部或者之间一种数据序列化的标准设计,可以非常方便且无二义性的被各类语言识别,让数据的传递无差异,以便非常好的让程序处理我们的日常任务。这也是为什么ansible选择它来作为playbook的承载语言。

也因为以上原因,它被广泛运用在了配置文件、信息交换、对象持久化、数据检查等场景。它的文件后缀一般是.yml

YAML的使用

yaml的使用包括了两部分,一个是yaml数据的定义,一个是它在其他程序里如何被使用。

YAML 的基础语法

大小写敏感

使用缩进表示层级关系

不允许使用tab,只允许空格

缩进的空格数量不重要,只要层级相同的元素左对齐即可

‘#’ 表示注释,类似Python 注释生效到行末

YAML的数据结构

yaml 有三种基础的数据结构,

对象,key、value的键值对,可以称之为mapping、字典、哈希等等,约等于Python的dict,value可以是任何支持的数据结构。key值是字符串,按变量的要求命名,字幕开头不会有错的。

数组:一组按次序排列的值,value同样可以是任何支持的数据结构。类似于序列、列表。

纯量:单个不可再分的值,有点像Python中的基础数据结构,有字符串、布尔值、整数、浮点数、Null、时间、日期,这两个有别其他语言。

纯量中的字符串、数字我们比较熟了,我们分别为大家讲讲。

对象

对象的一组键值对,使用冒号结构表示。前面是key,后面是value。

device_name: fw01

类似Python中的

{‘device_name':’fw01‘}

对象可以是复合的,与数组、对象复合使用,表达复杂的数据。

对象与对象结合

# 对象中有对象
  dev_info:
    name: dev01
    auth_info:
      username: admin
      password: admin123

注意dev_info没有顶头写,也是可以的,但是不推荐。这里只是演示一下。

以下才是比较正规的写法

# 对象中有对象
dev_info:
  name: dev01
  auth_info
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python中的YAML可以通过PyYAML库来实现。PyYAML提供了将YAML格式数据解析为Python对象和将Python对象转换为YAML格式数据的方法。下面是一个简单的示例代码: ```python import yaml # 将YAML格式数据解析为Python对象 with open('example.yaml', 'r') as f: data = yaml.load(f, Loader=yaml.FullLoader) # 将Python对象转换为YAML格式数据 with open('example.yaml', 'w') as f: yaml.dump(data, f) ``` 在这个示例中,我们使用了`yaml.load()`方法将YAML格式数据解析为Python对象,并使用了`yaml.dump()`方法将Python对象转换为YAML格式数据。注意,在解析YAML格式数据时,我们传递了一个`Loader`参数,这是为了防止YAML中的一些安全漏洞而必须指定的。 ### 回答2: Python的yaml模块是一个处理YAML格式文件的库。YAML是一种人类友好的数据序列化格式,常用于配置文件、数据交换和简单的持久化存储。通过使用yaml模块,我们可以轻松地将YAML文件转换为Python对象,并将Python对象序列化为YAML格式。 主要功能: 1. 解析YAMLyaml模块提供了`load()`函数,可以将YAML文件的内容解析为Python对象,例如字典、列表等。这使得我们可以轻松地读取和访问YAML文件中的数据。 2. 序列化为YAML:使用yaml模块的`dump()`函数,我们可以将Python对象序列化为YAML格式的字符串,并将其写入文件。这使得我们可以方便地将Python对象保存为YAML文件。 3. 支持自定义对象:yaml模块可以序列化和反序列化用户自定义的对象。通过为对象定义`__repr__()`和`__init__()`方法,我们可以确保自定义对象能够正确地被序列化和反序列化。 4. 支持注释:yaml模块支持在YAML文件中添加注释。通过使用`#`字符,我们可以在YAML文件中添加注释,提高文件的可读性。 5. 支持引用:yaml模块支持引用其他部分的数据。通过使用`&`字符定义引用标记,并使用`*`字符引用该标记,我们可以在YAML文件中重复使用相同的值,提高文件的可重用性。 总之,Python的yaml模块为我们处理YAML文件提供了简单而强大的工具集。无论是解析YAML文件、序列化Python对象还是处理自定义对象,yaml模块都能够轻松胜任,并且提供了丰富的功能来提高文件的可读性和可重用性。 ### 回答3: Python中的yaml模块是一个用于处理和解析YAML格式的库。YAMLYAML Ain't Markup Language)是一种人类可读的数据序列化格式,它与XML和JSON类似,但更加简洁和易于阅读。 使用Python的yaml模块,我们可以将Python数据结构(如列表、字典等)转换为YAML格式的字符串,也可以将YAML格式的字符串解析为Python数据结构。这对于在不同的系统之间传递和存储数据非常有用,尤其是当数据需要保持其结构和层次关系时。 在Python中使用yaml模块非常简单。首先,我们需要导入yaml模块: ```python import yaml ``` 然后,我们可以使用load()函数将YAML格式的字符串解析为Python数据结构: ```python data = yaml.load(yaml_string) ``` 我们还可以使用dump()函数将Python数据结构转换为YAML格式的字符串: ```python yaml_string = yaml.dump(data) ``` 此外,yaml模块还提供了其他功能,如将YAML格式的数据写入文件或从文件中读取YAML数据。我们可以使用load_file()函数从文件中读取YAML数据,使用dump()函数将YAML数据写入文件。 总之,Python的yaml模块是一个非常方便和强大的工具,用于处理和解析YAML格式的数据。它可以帮助我们在不同的系统和编程语言之间轻松地传递和存储数据,并确保数据的结构和层次关系保持完整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值