YAML Aint't a Markup Language
(YAML不是一种标记语言),是一种易读的序列化语言配置文件
中python的PyYaml
模块是Python的YAML解析器和生成器
def read_yaml():
with open(path, "r", encoding="utf-8") as f:
result = f.read()
result = yaml.load(result, Loader=yaml.FullLoader)
print(result)
# 也可以写成如下代码
def read_yaml():
with open(path, "r", encoding="utf-8") as f:
result = f.read()
result = yaml.full_load(result)
print(result)
针对不同的需要,加载器有如下的集中类型:
BaseLoader
仅加载最基本的YAMLSafeLoader
安全地加载YAML语言的子集。建议用于加载不受信任的输入(safe_load)FullLoader
加载完整YAML语言。避免任意代码执行。这是默认加载器(full_load)UnsafeLoader
也称为Loader向后兼容性,原始的Loader代码,不受信任的数据可能通过这种方式执行其他有危害的代码def write_yaml():
with open(path, "w", encoding="utf-8") as f:
yaml.dump(data, f, Dumper=yaml.SafeDumper)
对象
键值对的集合,又称为映射
(mapping)/ 哈希
(hashes)/ 字典
(dictionary)数组
一组按次序排列的值,又称为序列
(sequence)/ 列表
(list)纯量(scalars)
单个的、不可再分的值#
表示注释:
表示,列表的项通过 -
表示情况一:值为字符串
animals: dogs
表示为python的字典为:
{
"animal": "dogs"
}
情况二:值为字典
person: { name: Steve, age: 18 }
{
"person": {
"name": "Steve",
"age": 18
}
}
情况三:值为列表
lists: [ 1,2,3 ]
{
"lists": [
1,
2,
3
]
}
情况四:没有元组这种类型
tuples: (1,2,3)
{
"tuplers": "(1,2,3)"
}
cool_list:
- 10
- 12
- 15
hard_list:
- { key: value }
- [ 1,2,3 ]
- test:
- 1
- 2
- 3
twice_list:
- - { a: b }
- { c: d }
- { e: f }
{
"cool_list": [
10,
12,
15
],
"hard_list": [
{
"key": "value"
},
[
1,
2,
3
],
{
"test": [
1,
2,
3
]
}
],
"twice_list": [
[
{
"a": "b"
},
{
"c": "d"
},
{
"e": "f"
}
]
]
}
纯量是最基本的、不可再分的值,以下是一些常见的类型
int: 12
float: 12.3
string: hello
bool_1: true
None: null
time: 2022-04-10t22:39:32.10-05:00
date: 2022-04-10
表示为
{
'int': 12,
'float': 12.3,
'string': 'hello',
'bool': True,
'None': None,
'time': datetime.datetime(2022, 4, 10, 22, 39, 32, 100000, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=68400)))
'date': datetime.date(2022, 4, 10)
}
ISO 8601
格式,日期格式需为yyyy-MM-dd
"true"
~
表示null
''
""
包裹空格
或者 特殊字符
时,则最好使用引号str1: "\n22"
str2: '\n33'
{'str1': '\n22', 'str2': '\\n33'}
intToStr: !!str 123
boolToStr: !!str true
strToFloat: !!float '12.22'
转换后表示为:{
"intToStr": "123",
"boolToStr": "true",
"strToFloat": 12.22
}
参考文章:
https://www.cnblogs.com/poloyy/p/12482510.html
https://www.cnblogs.com/poloyy/p/12448509.html