python-yaml
python-YAML
YAML
是一种简洁的非标记语言。其以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁。主要是作为项目的配置文件。
文件格式
基本规则:
-
大小写敏感
-
使用缩进表示层级关系
-
缩进时不允许使用Tab键,只允许使用空格。
-
缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
-
使用#表示注释
-
字符串可以不用引号标注
yaml
支持的数据结构有三种:
- 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
- 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
- 纯量(scalars):单个的、不可再分的值。字符串、布尔值、整数、浮点数、Null、时间、日期
数组序列
- admin1: 123456
- admin2: 111111
- admin3: 222222
输出:[{'admin1': 123456},
{'admin2': 111111},
{'admin3': 222222}]
纯量
n1: 52.10
---------------------------------------------------------------
n2: true
n3: false #不区分大小写
---------------------------------------------------------------
None用~表示
n4: ~
输出:{'n1': 52.1}
---------------------------------------------------------------
输出:{'n2': True, 'n3': False}
---------------------------------------------------------------
输出:{'n4': None}
键值对
user: admin
pwd: 123
job:
- teacher
- nurese
{'user': 'admin',
'pwd': 123,
'job': ['teacher', 'nurese']}
混合使用
1.list嵌套dict
- user: admin1
psw: '123456'
- user: admin2
psw: '111111'
- user: admin3
psw: '222222'
用python读取出来的结果:
[{'user': 'admin1', 'psw': '123456'},
{'user': 'admin2', 'psw': '111111'},
{'user': 'admin3', 'psw': '222222'}]
2.dict嵌套list
nub1:
- admin1
- '123456'
nb2:
- admin2
- '111111'
nb3:
- admin3
- '222222'
用python读取出来的结果:
{'nub1': ['admin1', '123456'],
'nb2': ['admin2', '111111'],
安装创建
pip install pyyaml
1、创建一个file,前面文件名称随便,后面文件后缀 .yaml
2、 编写 yaml
# 简介
name: zhangsan
age: 20
profession:
name: fawaikuangtu
annual: 1k
skill:
- name: zhangwu
pay: 1K
- name2: lisi
pay: 2K
读取yaml
import yaml
f = open(r'./name.yaml','r',encoding='utf-8')
result = f.read()
print(result)
---------------------------------------------------------------
#由于官方提示load方法存在安全漏洞,所以读取文件时会报错。加上warning忽略,就不会显示警告
yaml.warnings({'YAMLLoadWarning':False})
pyres=yaml.load(result)
# 或者
pyres=yaml.safe_load(result) # yaml.load() 发出警告
# 因为python认为load是不安全的,发出了安全警告,那么我们如何取消警告呢?
print(pyres)
print(result)
name: zhangsan
age: 20
profession:
name: fawaikuangtu
annual: 1k
skill:
- name: zhangwu
pay: 1K
- name2: lisi
pay: 2K
---------------------------------------------------------------
print(pyres)
{'name': 'zhangsan', 'age': 20, 'profession': {'name': 'fawaikuangtu', 'annual': '1k'}, 'skill': [{'name': 'zhangwu', 'pay': '1K'}, {'name2': 'lisi', 'pay': '2K'}]}
文件写入
import yaml
import os
def yaml_doc(yampath):
data={'school':'luoxiang',
'studens':['zhangsan','lisi']}
file=open(yampath,'w',encoding='utf-8')
yaml.dump(data,file)
file.close()
currentpath=os.path.abspath('.') #获取当前路径
yamlpath=os.path.join(currentpath,'xingfa.yaml') #创建yaml文件
yaml_doc(yamlpath)
---------------------------------------------------------------
输出:
generate.yaml文件
school: luoxiang
studens:
- zhangsan
- lisi