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

 

posted @ 2020-08-05 20:50  追逐蹉跎的岁月  阅读(341)  评论(0编辑  收藏  举报