在学习python如何操作yml文件之前,我们先科普一下yml的格式

yaml是专门写配置文件的语言,非常简洁和强大,比json更加方便

YAML 语言(发音 /ˈjæməl/ )的设计目标,就是方便人类读写。它实质上是一种通用的数据串行化格式。

它的基本语法规则如下:

  1,大小写敏感

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

  3,缩进时不允许使用tab键,只允许使用空格

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

# 表示注释,从这个符号开始, 一直到行尾,都会被解释器忽略

yaml支持的数据结构 有三种:

  1,对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)

  2,数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)

  3,纯量(scalars):单个的、不可再分的值

以下分别介绍这三种数据结构

一,对象

  对象的一组键值对,使用冒号结构表示

  animal:pets

  Yaml 也允许另一种写法,将所有键值对写成一个行内对象

  hash:{name:Steve,foo:bar}

二,数组

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

  - cat

  - Dog

  数据结构的子成员是一个数组,则可以在该项下面缩进一个空格:

  -

- cat

     - Dog

  数组也可以采用行内表示法:

  animal:[cat,Dog]

三,复合结构

  对象和数组可以结合使用,形成复合结构:

  languages:

    - Ruby

    - Perl

- Python

  websites:

    YAML:yaml.org

    Ruby:ruby-lang.org

    Python:python.org

    Perl:use.perl.org

四,纯量

  纯量是最基本的、不可再分的值。以下数据类型都属于 JavaScript 的纯量:

  1,字符串

  2,布尔型

  3,整数

  4,浮点型

  5,null

  6,时间

  7,日期

  数值直接以字面量的形式表示:

    number:12.30

  布尔值用truefalse表示:

    isSet:True

  null用~表示:

    parent:~

  时间采用 ISO8601 格式:

    iso8601:2001-12-14t21:59:43.10-05:00

  日期采用复合 iso8601 格式的年、月、日表示:

    date:2018-01-01

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

    e: !!str 123

    f: !!str Ture

五,字符串

  字符串是最常见的,也是最复杂的一种数据类型

  字符串默认不适用引号表示

  str:这是一行字符串

  如果字符串包含空格,特殊符号等,需要放到引号内

  str:'内容:字符串'

  单引号和双引号都可以用,双引号不会对特殊字符转义

  s1:'内容\n字符串'

  s2:“内容\n字符串”

  单引号之中如果还有单引号,必须连续使用两个单引号转义

  str:'labor''s day'

  字符串可以写成多行,从第二行开始,必须有一个单空格缩进,换行符会被转成空格

  str:这是一段

    多行

    字符串

  多行字符串可以使用|保留换行符,也可以使用>折叠换行

  this: |

    foo

    bar

  that: >

    foo

    bar

  +表示保留文字块末尾的换行,-表示删除文字块末尾的换行

  s1: |

    foo

  s2: |+

    foo

  s3: |-

    foo

  字符串内可以插入HTML标记

  message: |

    <p style='color:red'>

      段落

    /p>

六,引用

  锚点&和别名*,可以用来引用

  defaults: &defaults

     adapter: postgres

     host:   localhost

  development:

    database:myapp_development

    <<:*defaults

  test:

    database:myapp_test

    <<:*defaults

  等同于下面的代码:

  defaults:

    adapter:postgres

    host:localhost

  development:

    database:myapp_development

    adapter:postgres

    host:localhost

  test:

    database:myapp_test

    adapter:postgres

    host:localhost

----------------------------------下面看完整的列子----------------------------------------

#这是一个ymal

name: Tom Smith
age: 37
spouse:
name: Jane Smith
age: 25
children:
- name: Jimmy Smith
age: 25
- name1: Jenny Smith
age1: 12 #这是读取yaml的py代码,用load方法
import yaml
f = open('test.yaml')
y = yaml.load(f)
print(y)
#这是结果:{'name': 'Tom Smith', 'age': 37, 'spouse': {'name': 'Jane Smith', 'age': 25}, 'children': [{'name': 'Jimmy Smith', 'age': 25}, {'name1': 'Jenny Smith', 'age1': 12}]} --------------------自动生成yaml文件--------------------用dump方法
import yaml

d = [{'tasks': [{'yum': {'state': 'latest', 'name': 'httpd'}, 'name': 'ensure apache is at the latest version'}, {'name': 'write the apache config file', 'template': {'dest': '/etc/httpd.conf', 'src': '/srv/httpd.j2'}, 'notify': ['restart apache']}, {'name': 'ensure apache is running', 'service': {'state': 'started', 'name': 'httpd'}}], 'hosts': 'webservers', 'remote_user': 'root', 'vars': {'http_port': 80, 'max_clients': 200}, 'handlers': [{'name': 'restart apache', 'service': {'state': 'restarted', 'name': 'httpd'}}]}]

with open("./test.yaml","w") as f:
yaml.dump(d,f) #生成的结果文件
- handlers:
- name: restart apache
service: {name: httpd, state: restarted}
hosts: webservers
remote_user: root
tasks:
- name: ensure apache is at the latest version
yum: {name: httpd, state: latest}
- name: write the apache config file
notify: [restart apache]
template: {dest: /etc/httpd.conf, src: /srv/httpd.j2}
- name: ensure apache is running
service: {name: httpd, state: started}
vars: {http_port: 80, max_clients: 200}

  

    



python之常用模块ymal的更多相关文章

  1. python的常用模块之collections模块

    python的常用模块之collections模块 python全栈开发,模块,collections 认识模块 什么是模块?    常见的场景:一个模块就是一个包含了python定义和声明的文件,文 ...

  2. python(五)常用模块学习

    版权声明:本文为原创文章,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明. https://blog.csdn.net/fgf00/article/details/52357 ...

  3. Python之常用模块学习(一)

    本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configpars ...

  4. python之常用模块

    python 常用模块 之 (subprocess模块.logging模块.re模块) python 常用模块 之 (序列化模块.XML模块.configparse模块.hashlib模块) pyth ...

  5. python之常用模块二(hashlib logging configparser)

    摘要:hashlib ***** logging ***** configparser * 一.hashlib模块 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 摘要算法 ...

  6. Python学习——python的常用模块

    模块:用一堆代码实现了某个功能的代码集合,模块是不带 .py 扩展的另外一个 Python 文件的文件名. 一.time & datetime模块 import time import dat ...

  7. python 之常用模块

    一 认识模块 二 常用模块    (1)re模块    (2)collections模块 一  认识模块     (1)什么是模块      (2)模块的导入和使用 (1)模块是:一个模块就是一个包含 ...

  8. Python之常用模块--collections模块

    认识模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的 ...

  9. Python自动化开发之python的常用模块

    python常用模块 模块的种类:模块分为三种,分别是自定义模块:内置标准模块(即标准库):开源模块(第三方). 以下主要研究标准模块即标准库:标准库直接导入即可,不需要安装. 时间模块:time , ...

随机推荐

  1. 量化投资学习笔记31——《Python机器学习应用》课程笔记05

    用分类算法进行上证指数涨跌预测. 根据今天以前的150个交易日的数据,预测今日股市涨跌. 交叉验证的思想:将数据集D划分为k个大小相似的互斥子集,每个子集都尽可能保持数据分布的一致性,即从D中通过分层 ...

  2. Hexo站点Next主题添加google adsense广告

    本文转载自: https://www.93bok.com 前言 无意之间看到了google adsense的广告,于是就想到给我的站点也弄一个,本来以为是很简单的事,参考了很多资料,终于是部署成功了, ...

  3. Docker: Error response from daemon: Get.........unauthorized: incorrect username or password

    今天在Centos中使用docker拉取redis镜像时报Error response from daemon: Get https://registry-1.docker.io/v2/library ...

  4. 【WPF学习】第五十六章 基于帧的动画

    除基于属性的动画系统外,WPF提供了一种创建基于帧的动画的方法,这种方法只使用代码.需要做的全部工作是响应静态的CompositionTarge.Rendering事件,触发该事件是为了给每帧获取内容 ...

  5. 网页入侵最后一道防线:CSP内容安全策略

    首先,什么是最后一道防线?网页入侵都有一个过程,简单来说,就是1.代码注入,2.代码执行. 对于黑客来说,代码注入后并不代表就万事大吉了,因为此时代码只是安静地躺在受害者的服务器里,什么坏事都没干呢! ...

  6. JZOJ 5328. 【NOIP2017提高A组模拟8.22】世界线

    5328. [NOIP2017提高A组模拟8.22]世界线 (File IO): input:worldline.in output:worldline.out Time Limits: 1500 m ...

  7. 使用openxml提取word中的文本和图片并转为Html

    使用openxml提取word中的文本和图片 使用 openXml 提取 word 中的 Text 和 Drawing 使用 openXml 将 word 中的文本和图片转为Html 使用 openX ...

  8. Asp.Net Core 中IdentityServer4 授权中心之自定义授权模式

    一.前言 上一篇我分享了一篇关于 Asp.Net Core 中IdentityServer4 授权中心之应用实战 的文章,其中有不少博友给我提了问题,其中有一个博友问我的一个场景,我给他解答的还不够完 ...

  9. 手机app抓包工具,安卓手机adb无线连接

    默认手机已经usb调试配置完成 网络必须在同一网络中,每次断开wifi连接,都必须重新重做一次 使用数据线连接电脑 cmd 打开一个命令行 输入 # abd如果没有配置环境变量,请配置或者进入adb文 ...

  10. vue中moment.js的使用

    一.介绍 moment.js是一款现在对时间处理的强大的函数. Moment被设计用于在浏览器和Node.js中工作. 目前ci系统使用的浏览器有:IE8.IE9在Windows 7上.Chrome在 ...