YAML文件的操作
YAML 是 “YAML Ain’t a Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:”Yet Another Markup Language”(仍是一种标记语言)。YAML 的配置文件后缀为 .yml
为什么使用yaml,因为yaml更加的简洁,操作简单,还能存放不同类型的数据### 基本语法
大小写敏感使用缩进表示层级关系缩进不允许使用tab,只允许空格缩进的空格数不重要,只要相同层级的元素左对齐即可’#’表示注释
(1) 对象键值对使用冒号结构表示 key: value,冒号后面要加一个空格。例如:key:child-key:valuechild-key2:value2(2) 以 - 开头的行表示构成一个数组:-A-B-C对维数组表示方法—A-B- C(3)举例
languages:-Ruby-Perl-Pythonwebsites:YAML:yaml.orgRuby:ruby-lang.orgPython:python.orgPerl:use.perl.org转化为json:{languages:[‘Ruby’,’Perl’,’Python’],websites:{YAML:’yaml.org‘,Ruby:’ruby-lang.org‘,Python:’python.org‘,Perl:’use.perl.org‘}}
## YAML,纯量
纯量是最基本的、不可再分的值;类似基本数据类型
- 字符串
- 布尔值
- 整数
- 浮点数
- 时间
- 日期
- Null
int:12float:12.3string: petsbool: trueNone: nulltime:2001-12-14t21:59:43.10-05:00date:2018-03-21
python对于yaml文件的操作
官网:https://pypi.org/project/PyYAML/pip install PyYAML
importyamldefread_yaml( path): withopen(path,encoding=”utf-8”)asf: result = f.read() result = yaml.load(result,Loader=yaml.FullLoader)#loader可选择BaseLoader、SafeLoader、FullLoader、UnsafeLoader returnresult
res = read_yaml(“test.yaml”)print(res)针对不同的需要,加载器有如下几种类型:
- BaseLoader:仅加载最基本的YAML
- SafeLoader:安全地加载YAML语言的子集。建议用于加载不受信任的输入。(safe_load)
- FullLoader:加载完整的YAML语言。避免任意代码执行。这是当前(PyYAML 5.1)默认加载器调用 yaml.load(input) (发出警告后)(full_load)
- UnsafeLoader(也称为Loader向后兼容性):原始的Loader代码,可以通过不受信任的数据输入轻松利用。(unsafeload)
将数据写入yaml文件中例如:data = {“num”:[1,2,3,5,8]}withopen(“test.yaml”,”w”,encoding=”utf-8”)asf: yaml.dump(data, f,Dumper=yaml.SafeDumper)
存储内容:num:- 1- 2- 3- 5- 8
封装yaml方法:importyamlclass YamlUtil:
instance =None
defnew(cls, args, *kwargs): if notcls.instance: print(“YamlUtil first init”) cls.instance =super(YamlUtil,cls).new_(cls, args, *kwargs) returncls.__instance
defread_yaml(self, path): withopen(path,encoding=”utf-8”)asf: result = f.read() result = yaml.load(result,Loader=yaml.FullLoader) returnresult
defwrite_yaml(self, path, data): withopen(path,”w”,encoding=”utf-8”)asf: yaml.dump(data, f,Dumper=yaml.SafeDumper)
yamlUtil = YamlUtil()print(yamlUtil.read_yaml(“test.yaml”))