python之常用模块ymal
在学习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
布尔值用true和false表示:
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的更多相关文章
- python的常用模块之collections模块
python的常用模块之collections模块 python全栈开发,模块,collections 认识模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文 ...
- python(五)常用模块学习
版权声明:本文为原创文章,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明. https://blog.csdn.net/fgf00/article/details/52357 ...
- Python之常用模块学习(一)
本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configpars ...
- python之常用模块
python 常用模块 之 (subprocess模块.logging模块.re模块) python 常用模块 之 (序列化模块.XML模块.configparse模块.hashlib模块) pyth ...
- python之常用模块二(hashlib logging configparser)
摘要:hashlib ***** logging ***** configparser * 一.hashlib模块 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 摘要算法 ...
- Python学习——python的常用模块
模块:用一堆代码实现了某个功能的代码集合,模块是不带 .py 扩展的另外一个 Python 文件的文件名. 一.time & datetime模块 import time import dat ...
- python 之常用模块
一 认识模块 二 常用模块 (1)re模块 (2)collections模块 一 认识模块 (1)什么是模块 (2)模块的导入和使用 (1)模块是:一个模块就是一个包含 ...
- Python之常用模块--collections模块
认识模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的 ...
- Python自动化开发之python的常用模块
python常用模块 模块的种类:模块分为三种,分别是自定义模块:内置标准模块(即标准库):开源模块(第三方). 以下主要研究标准模块即标准库:标准库直接导入即可,不需要安装. 时间模块:time , ...
随机推荐
- sys.argv的意义[转]
sys.argv的意义 原文地址:https://www.cnblogs.com/zzliu/p/10775049.html 简单来说,sys.argv是一个参数列表,这个列表存放着从外界获取到的参数 ...
- MQ消息丢了怎么破?在线等.....
MQ又丢消息了,老板眉头一紧............ 在我们从事技术的工作中,离不开中间件,mq就是常见的中间件之一,丢消息可能是我们经常遇到的,为啥会丢?丢了怎么破?测试能不能复现,很多同学知道一些 ...
- OCR场景文本识别:文字检测+文字识别
一. 应用背景 OCR(Optical Character Recognition)文字识别技术的应用领域主要包括:证件识别.车牌识别.智慧医疗.pdf文档转换为Word.拍照识别.截图识别.网络图片 ...
- Echarts轻松入门,内附踩坑秘籍
首先介绍一下我们的主角ECharts ECharts,一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Fir ...
- 痞子衡嵌入式:恩智浦SDK驱动代码风格、模板、检查工具
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是恩智浦 SDK 驱动的代码风格. 上周痞子衡受领导指示,给 SE 同事做了一个关于 SDK 代码风格的分享.随着组内新人的增多,这样的培训 ...
- Redis03——Redis是如何删除你的数据的
众所周知Redis针对每一个key都能单独设置过期时间,那么Redis是怎么处理这些key的过期时间的呢?当同一时间有大量Key同时到期时,Redis又是怎么处理的呢?会不会影响到我的线上业务呢?如果 ...
- Mathtype快捷键&小技巧
Mathtype使用方便,能插入到Office等编辑器中,Latex公式在某些地方更加通用,如网页和书籍. 1. Mathtype简介 数学公式编辑器(MathType)是一款专业的数学公式编辑工具, ...
- php里面的一些面试经典的函数
<?php /* 这是一个多线程的读取解决的函数 @param1 $fle 传入要读取的文件名 */ function filelock($fle){ $fp=fopen($fls,'w+'); ...
- Docker深入浅出系列 | 5分钟搭建你的私有镜像仓库
Docker已经上市很多年,不是什么新鲜事物了,很多企业或者开发同学以前也不多不少有所接触,但是有实操经验的人不多,本系列教程主要偏重实战,尽量讲干货,会根据本人理解去做阐述,具体官方概念可以查阅官方 ...
- SpringBoot入门系列(七)Spring Boot整合Redis缓存
前面介绍了Spring Boot 中的整合Mybatis并实现增删改查,.不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/category/ ...