1.安装
- 需要安装得模块名为pyyaml,直接pip install pyyaml
- 导入,直接import yaml
2.yaml文件的格式
- 文件格式输出可以是列表,可以是字典,可以嵌套。层级关系用空格区分,切记,不支持tab缩进
a)键值对形式
user: admin pwd: 123 job: - teacher - nurese 输出为:{'user': 'admin', 'pwd': 123, 'job': ['teacher', 'nurese']}
b)序列list
- admin1: 123456 - admin2: 111111 - admin3: 222222 输出:[{'admin1': 123456}, {'admin2': 111111}, {'admin3': 222222}]
c)纯量str
n1: 52.10 输出:{'n1': 52.1} n2: true n3: false #不区分大小写 输出:{'n2': True, 'n3': False} None用~表示 n4: ~ 输出:{'n4': None}
d)强制转换,使用!!
n7: !!str true 输出:{'n7': 'true'}
e)多个文件:一个yaml文件里存在多个文件,用---表示,只能一起读取,不能分开读取
--- user: admin pwd: ~ job: - teacher - nurese --- school: erxiao location: sky
3.yaml文件的读取xx.yaml
'''多个文件''' import yaml #由于官方提示load方法存在安全漏洞,所以读取文件时会报错。加上warning忽略,就不会显示警告 yaml.warnings({'YAMLLoadWarning':False}) f=open('source.yaml','r',encoding='utf-8') #打开yaml文件 cfg=f.read() d=yaml.load_all(cfg) #将数据转换成python字典行驶输出,存在多个文件时,用load_all,单个的时候load就可以 for data in d: print(data) f.close() 输出: {'user': 'admin', 'pwd': None, 'job': ['teacher', 'nurese']} {'school': 'erxiao', 'location': 'sky'} '''单个文件''' yaml.warnings({'YAMLLoadWarning':False}) f=open('source.yaml','r',encoding='utf-8') cfg=f.read() print(cfg) d=yaml.load(cfg) print(d) f.close() 输出: user: admin pwd: ~ job: - teacher - nurese {'user': 'admin', 'pwd': None, 'job': ['teacher', 'nurese']}
4.yaml文件的写入
import yaml import os def yaml_doc(yampath): data={'school':'erxiao', 'studens':['lili','jj']} file=open(yampath,'w',encoding='utf-8') yaml.dump(data,file) file.close() currentpath=os.path.abspath('.') #获取当前路径 yamlpath=os.path.join(currentpath,'generate.yaml') #创建yaml文件 yaml_doc(yamlpath) 输出: generate.yaml文件 school: erxiao studens: - lili - jj ```※注意:如果是在已存在数据的yaml文件中执行此脚本,那么数据会被覆盖※```
※问题:1.含有多个文件的yaml文件,读取出来如何选择?
2.持续写入能否将新写入的文件变成新的文件结构?※
PS:觉得这篇文章有用的朋友,多多点赞打赏哦~!