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

posted @ 2021-06-25 18:25  贝壳里的星海  阅读(454)  评论(0编辑  收藏  举报