-
YAML文件
- 简介:YAML结构(Structure)通过空格来展示。序列(Sequence)里的项用"-"来代表,Map里的键值对用":"分隔.
- 在YAML中,字串不一定要用双引号标示。另外,在缩排中空白字符的数目并不是非常重要,只要相同阶层的元素左侧对齐就可以了(不过不能使用TAB字符)。
-
test.yaml
---
receipt: Oz-Ware Purchase Invoice
date: 2012-08-06
customer:
given: Dorothy
family: Gale
items:
- part_no: A4786
descrip: Water Bucket (Filled)
price: 1.47
quantity: 4
- part_no: E1628
descrip: High Heeled "Ruby" Slippers
size: 8
price: 133.7
quantity: 1
bill-to: &id001
street: |
123 Tornado Alley
Suite 16
city: East Centerville
state: KS
ship-to: *id001
specialDelivery: >
Follow the Yellow Brick
Road to the Emerald City.
Pay no attention to the man behind the curtain
....
-
解读:
注意在YAML中,字串不一定要用双引号标示。另外,在缩排中空白字元的数目并不是非常重要,只要相同阶层的元素左侧对齐就可以了(不过不能使用TAB字元)。这个文件的的顶层由七个键值组成:其中一个键值"items",是个两个元素构成的阵列(或称清单),这清单中的两个元素同时也是包含了四个键值的杂凑表。文件中重复的部分用这个方法处理:使用锚点(&)和参考(*****)标签将"bill-to"杂凑表的内容复制到"ship-to"杂凑表。也可以在文件中加入选择性的空行,以增加可读性。在一个档案中,可同时包含多个文件,并用"---"分隔。选择性的符号"..."可以用来表示档案结尾(在利用串流的通讯中,这非常有用,可以在不关闭串流的情况下,发送结束讯号)。
-
应用:
- 读取
.yaml
文件:
import yaml
f = open('d:/tree.yml')
dataMap = yaml.load(f)
f.close()
print dataMap
print type(dataMap)
# 输出结果为字典
- 写
.yaml
文件
import yaml
f = open('d:/newtree.yaml', "w")
yaml.dump(dataMap, f)
f.close()
-
语法:
在yaml.org(英文)可以找到轻巧而好用的小抄(亦是用YAML表示)及格式说明。下面的内容,是关于基本元件的摘要。
- YAML使用可打印的Unicode字元,可使用UTF-8或UTF-16。
- 使用空白字元为文件缩排来表示结构;不过不能使用跳格字元(TAB)。
- 注解由井字号( # )开始,可以出现在一行中的任何位置,而且范围只有一行(也就是一般所谓的单行注解)
- 每个清单成员以单行表示,并用短杠+空白( **- ** )起始。或使用方括号( [ ] ),并用逗号+空白( **, ** )分开成员。
- 每个杂凑表的成员用冒号+空白(** : ** )分开键值和内容。或使用大括号( { } ),并用逗号+空白( , ** )分开。杂凑表的键值可以用问号 ( ?** )起始,用来明确的表示多个词汇组成的键值。
- 字串平常并不使用引号,但必要的时候可以用双引号 ( " )或单引号 ( ' )框住。使用双引号表示字串时,可用倒斜线( ** )开始的跳脱字元(这跟C语言类似)表示特殊字元。
- 区块的字串用缩排和修饰词(非必要)来和其他资料分隔,有新行保留(preserve)(使用符号 | )或新行折叠(flod)(使用符号 > )两种方式。
- 在单一档案中,可用连续三个连字号(---)区分多个档案。另外,还有选择性的连续三个点号( ... )用来表示档案结尾。
- 重复的内容可使从参考标记星号 ( ***** )复制到锚点标记( & )。
- 指定格式可以使用两个惊叹号 (** !!** ),后面接上名称。
- 档案中的单一文件可以使用指导指令,使用方法是百分比符号(** %** )。有两个指导指令在YAML1.1版中被定义: %YAML 指导指令,用来识别文件的YAML版本。
%TAG 指导指令,被用在URI的字首标记。这个方法在标记节点的型态时相当有用。 - YAML再使用逗号及冒号时,后面都必须接一个空白字元,所以可以再字串或数值中自由加入分隔符号(例如:5,280或http://www.wikipedia.org)而不需要使用引号。
另外还有两个特殊符号在YAML中被保留,有可能在未来的版本被使用--( @ )和( ` )。 -
总结:
- YAML的可读性好。
- YAML和脚本语言的交互性好。
- YAML使用实现语言的数据类型。
- YAML有一个一致的信息模型。
- YAML易于实现。
- Python 首选
- '-'+空白:输出格式为:列表
- api_off : http://api.XXX.com
- m_off : http://m.XXX.com
- pc_off : http://www.XXX.com
- 不带格式的输出格式为:字典
url_off : #The test environment
api_off : http://api.XXX.com
m_off : http://m.XXX.com
pc_off : http://www.XXX.com
- 字典中包含列表:
men: [John Smith, Bill Jones]
women:
- Mary Smith
- Susan Williams
- 列表包裹字典:
- {name: John Smith, age: 33}
- name: Mary Smith age: 27
- 更多、更详细进阶教程
@晴-- 2016-09-28 17:10:45