Python3 操作 YAML

YAML 格式合法性在线检测

http://www.yamllint.com/

什么是 YAML

YAML 是YAML Ain’t Markup Language(YAML不是一种标记语言)的缩写(又玩起了递归的游戏…)。读音是yamel(雅梅尔)或/ˈjæməl/

它是一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言。

YAML 的用途广泛,用于配置文件,日志文件,跨语言数据共享,对象持久化,复杂的数据结构等。

YAML 特点

1、大小写敏感
2、使用缩进表示层级关系
3、禁止使用tab缩进,只能使用空格键
4、缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级。
5、使用#表示注释
6、字符串可以不用引号“”标注

YAML 的数据结构

YAML 一共有三种数据结构

1、map,字典

使用冒号(:)表示键值对,同一缩进的所有键值对属于一个 map

# YAML表示
age: 12
name: huang

# 对应的Json表示
{'age':12, 'name':'huang'}

写法二:

# YAML表示
{age:12, name:huang}

# 对应的Json表示
{'age':12, 'name':'huang'}
2、list,列表

使用连字符(-)表示:

# YAML表示
- a
- b
- 12

# 对应Json表示
['a','b',12]

写法二:

# YAML表示
[a,b,c]

# 对应Json表示
[ 'a', 'b', 'c' ]
3、scalar,标量

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

字符串

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

字符串默认不使用引号表示。

str: 这是一行字符串

如果字符串之中包含空格或特殊字符,需要放在引号之中。

str: '内容: 字符串'

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

s1: '内容\n字符串'
s2: "内容\n字符串"

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

str: 'labor''s day' 

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

str: 这是一段
    多行
    字符串

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

this: |
    Foo
    Bar
that: >
    Foo
    Bar

转为 JavaScript 代码如下。

{ this: 'Foo\nBar\n', that: 'Foo Bar\n' }

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

s1: |
    Foo

s2: |+
    Foo

s3: |-
    Foo

转为 JavaScript 代码如下。

{ s1: 'Foo\n', s2: 'Foo\n\n\n', s3: 'Foo' }

字符串之中可以插入 HTML 标记。

message: |

    <p style="color: red">
        段落
    </p>

转为 JavaScript 如下。

{ message: '\n<p style="color: red">\n  段落\n</p>\n' }
数值型

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

number: 12.30
布尔值

布尔值用true和false表示。

isSet: true
Null

null用~表示。

parent: ~ 
时间

时间采用 ISO8601 格式。

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

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

date: 1976-07-31
数据类型转换

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

e: !!str 123
f: !!str true

数据结构嵌套

1、map 嵌套 map
# YAML表示
websites:
    YAML: yaml.org 
    Ruby: ruby-lang.org 
    Python: python.org 
    Perl: use.perl.org 

# 对应Json表示
{ websites: 
   { YAML: 'yaml.org',
     Ruby: 'ruby-lang.org',
     Python: 'python.org',
     Perl: 'use.perl.org' } }
2、map 嵌套 list
# YAML表示
languages:
    - Ruby
    - Perl
    - Python 
    - c

# 对应Json表示
{ languages: [ 'Ruby', 'Perl', 'Python', 'c' ] }
3、list 嵌套 list
# YAML表示
-
    - Ruby
    - Perl
    - Python 
- 
    - c
    - c++
    - java

# 对应Json表示
[ [ 'Ruby', 'Perl', 'Python' ], [ 'c', 'c++', 'java' ] ]
除此以外,还可以如下表示该结构

# 方法2
- - Ruby
    - Perl
    - Python 
- - c
    - c++
    - java

# 方法3
- [Ruby,Perl,Python]
- [c,c++,java]
4、list 嵌套 map
# YAML表示
-
    id: 1
    name: huang
-
    id: 2
    name: liao

# 对应Json表示
[ { id: 1, name: 'huang' }, { id: 2, name: 'liao' } ]

Python3 操作 YAML

Python 中,一般使用 PyYAML 模块操作 YAML。

pip install pyyaml

具体用法点这里

参考资料

[1] https://blog.csdn.net/vincent_hbl/article/details/75411243
[2] http://www.ruanyifeng.com/blog/2016/07/yaml.html

猜你喜欢

转载自blog.csdn.net/weixin_37641832/article/details/85858884
今日推荐