python--Yaml操作
1、安装:pip install PyYaml -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
2、python操作Yaml库:
字典--转换--字符串
import yaml python_obj = { "name":u"张三", "age":0, "job":"Tester" } y=yaml.dump(python_obj,default_flow_style=False) print(y) print(type(y)) 结果: age:0 job:Tester name:"\u5fc3\u7530" <class 'str'>
3、基本规则
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用Tab,只允许使用空格
- 缩进的空格数目不重要,只要相同层级的元素左对齐即可
- # 表示注释,从它开始到行尾都被忽略
4实例1:
test.yaml文件
#注释 #1、字典数据 name: tom #冒号后一定要加空格,才是键值对,注释前也加空格,加一个 password: 123456
test_yaml.py文件
import yaml #操作yaml yamlDir='test.yaml' #创建文件对象 fo=open(yamlDir,'r',encoding='utf-8') res=yaml.load(fo,Loader=yaml.FullLoader) print(res)
结果:{'name': 'tom', 'password': 123456}
实例2:
test.yaml文件
#2-数组(列表),注意空格 - hello - 张三 - 100
test_yaml.py文件
import yaml #操作yaml yamlDir='test.yaml' #创建文件对象 fo=open(yamlDir,'r',encoding='utf-8') res=yaml.load(fo,Loader=yaml.FullLoader) print(res)
结果:['hello', '张三', 100]
实例3:
test.yaml文件
#组合关系,注意空格和层级关系 - name: test psw: 1234 - aa: 100 bb:
- 30
- 40
test_yaml.py文件
import yaml #操作yaml yamlDir='test.yaml' #创建文件对象 fo=open(yamlDir,'r',encoding='utf-8') res=yaml.load(fo,Loader=yaml.FullLoader) print(res)
结果:[{'name': 'test', 'psw': 1234}, {'aa': 100, 'bb': [30, 40]}]
4、如果字符串中间有特殊符号,则必须给字符串加引号,单引号为原样输出,双引号则特殊字符其效果
'hello\nword'
结果:hello\nword
"hello\nword"
结果:hello
word
5、引用
&设置 *引用(内部参数化)
name: &name 张三
tester: *name
结果:{’name': '张三', 'age': '张三'}
6、分段,多组数据
test.yaml文件
--- name: &name tom age: *name --- aa: 100 bb: 200
test_yaml.py文件
import yaml #操作yaml yamlDir='test.yaml' #创建文件对象 fo=open(yamlDir,'r',encoding='utf-8') # res=yaml.load(fo,Loader=yaml.FullLoader) # print(res) #2组数据---可迭代对象 res=yaml.load_all(fo,Loader=yaml.FullLoader) print(res) for one in res: print(one)
结果:
<generator object load_all at 0x000000F125F409E0>
{'name': 'tom', 'age': 'tom'}
{'aa': 100, 'bb': 200}
7、yaml写操作
test_yaml.py文件
import yaml #yaml写操作 yamlDir='test.yaml' fo=open(yamlDir,'w',encoding='utf-8') data1={'name':'tom','age':20} yaml.dump(data1,fo)
test.yaml文件内写入值:
age: 20 name: tom
追赶曾经蹉跎的岁月