常用文件类型 -- YAML文件介绍

YAML文件介绍

1.1 yaml语法介绍

yaml文件是用来方便读写的一种格式。它实质上是一种通用的数据串行话格式。
它的基本语法如下:

  • 大小写敏感
  • 缩进表示层级关系
  • 缩进时不允许使用Tab,仅允许空格
  • 空格的多少不重要,关键是相同层级的元素要对齐
  • #表示注释,#后面的字符都会被忽略
  • 在单一档案中,可用连续三个连字号(——)区分多个档案。
    另外,还有选择性的连续三个点号( … )用来表示档案结尾

yaml支持的数据格式包括:

  • 字典
  • 数组
  • 纯量:单个的,不可再次分割的值

1.1.1 对象(字典)

对象是一组组的键值对,使用冒号表示结构

url: http://www.baidu.com
log: 
  file_name: test.log
  backup_count: 5
1234

yaml也允许另外一种写法,将所有的键值对写成一个行内对象

log: {file_name: test.log, backup_count: 5}
1

1.1.2 数组

一组横线开头的行,组成一个数组。

- cat
- Dog
- Goldfish
123

转换成python对象是

['cat', 'Dog', 'Goldfish']
1

数组也可以采用行内写法:

animal: [cat, dog]
1

转行成python对象是

{'animal': ['cat', 'dog']}
1

1.1.3 纯量

纯量是最基本,不可分割的值。
数字和字符串直接书写即可:

number: 12.30
name: zhangsan
12

布尔值用true和false表示

isSet: true
flag: false
12

null用~表示

parent: ~
1

yaml允许用两个感叹号表示强制转换

e: !!str 123
f: !!str true
12

1.1.4 引用

锚点&和别名*,可以用来引用

defaults: &defaults
   adapter: postgres
   host: localhost
 
development: 
   databases: myapp_deveploment
   <<: *defaults

test:
   databases: myapp_test
   <<: *defaults
1234567891011

等同于以下代码

defaults: 
   adapter: postgres
   host: localhost
 
development: 
   databases: myapp_deveploment
   adapter: postgres
   host: localhost

test:
   databases: myapp_test
   adapter: postgres
   host: localhost
12345678910111213

&用来建立锚点(defaults),<<表示合并到当前数据,*用来引用锚点
下面是另外一个例子:

- &abc st
- cat
- dog
- *abc
1234

转换成python代码是:

['st', 'cat', 'dog', 'st']

1.2 使用python操作yaml

1.2.1 安装依赖包

pip install pyyaml

1.2.2 获取数据

  • yaml文件如下
# config.yaml

user_info :
  name : zhangsan
  age : 18
  gender :is_admin : true
---
connect :
  host : 127.0.0.1
  user : db
  password : 123456
  port : 1521
  db : zet
...
  • 示例代码:
    import yaml

    # 获取yaml文件路径
    yamlPath = 'config.yaml'

    with open(yamlPath, 'rb') as f:
        file_data = f.read()
      
    data = yaml.safe_load_all(file_data)
    # salf_load_all方法得到的是一个迭代器,需要使用list()方法转换为列表
    print(list(data))
    # [{'user_info': {'name': 'zhangsan', 'age': 18, 'gender': '男', 'is_admin': True}},
    #  {'connect': {'host': '127.0.0.1', 'user': 'db', 'password': 123456, 'port': 1521, 'db': 'zet'}}]

1.2.3 修改数据

  • 示例代码:
data1 = [
        {
            'name': 'lisi',
            'age': 18,
            'roles': ['admin', 'sys_admin']
        },
        {
            'name': 'wangwu',
            'age': 20,
        }
    ]

    save_path = 'config1.yaml'
    with open(save_path, 'w') as f:
        yaml.dump(data1, f)
  • 输出结果:
- age: 18
  name: lisi
  roles:
  - admin
  - sys_admin
- age: 20
  name: wangwu

1.2.4 封装工具类

import yaml


class YAMLHelper(object):
    @staticmethod
    def read_from_yaml(path):
        with open(path, 'rb') as f:
            file_data = f.read()
            # yaml文件通过---分节,多个节组合成一个列表
        data = yaml.safe_load_all(file_data)

        return list(data)

    @staticmethod
    def write_to_yaml(path, data):
        with open(path, 'w') as f:
            yaml.dump(data, f)

1.2.5 调用举例

  • config.yaml
# config.yaml

user_info :
  name : zhangsan
  age : 18
  gender :is_admin : true
---
connect :
  host : 127.0.0.1
  user : db
  password : 123456
  port : 1521
  db : zet
...
  • 示例代码
 # 读取
    yaml_path = 'config.yaml'
    print(YAMLHelper.read_from_yaml(yaml_path))
    # [{'user_info': {'name': 'zhangsan', 'age': 18, 'gender': '男', 'is_admin': True}},
    #  {'connect': {'host': '127.0.0.1', 'user': 'db', 'password': 123456, 'port': 1521, 'db': 'zet'}}]

    data1 = [
        {
            'name': 'zhaoliu',
            'age': 18,
            'roles': ['admin', 'sys_admin']
        },
        {
            'name': 'wangwu',
            'age': 20,
        }
    ]

    save_path = 'config1.yaml'

    YAMLHelper.write_to_yaml(save_path, data1)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值