Python读取Yaml文件和Yaml文件常见数据格式

话不多说,直接上代码。

file_reader.py # 写一个常用的读取Yaml文件的类。封装好,方便后续使用。

import os
import yaml  # 通过 pip install pyyaml 得到

class YamlReader():

    def __init__(self, yamlf):

        if os.path.exists(yamlf):
            self.yamlf = yamlf
        else:
            raise FileExistsError("文件不存在!")
        self._data = None  # 私有属性

    @property
    def data(self):
        # 如果是第一次调用data,读取yaml文档,否则返回之前保存的数据
        if not self._data:  # 如果不存在,则读取.
            with open(self.yamlf, 'rb') as f:
                self._data = list(yaml.safe_load_all(f))  # load返回的是一个生成器,需要list转换
        return self._data[0]

yaml_demo.yaml # 文件的内容如下,作为一个示例文本。

Yaml常见数据格式:
# 这是一个yaml文件示例文档.
text1: 字符串  # 直接写,是字符串(键值对的字符串),但是数字的话,直接是整型.
person: # person:[{"name":"张三"},{"age":18}]
  - name: 张三
  - age: 18  # 数字的整型
  - gender:- favorite: [ '喝酒','抽烟','打游戏' ]  # 这里能得到一个列表.{'favorite': ['喝酒', '抽烟', '打游戏']}
not_set1: { 'A','B','C' }  # 并不能直接得到一个集合,因为已经红框标注了.'set1': {'A': None, 'B': None, 'C': None}
set2: !!set { 'A','B','C' }  # 强制转换为集合。这样就能得到集合类型了. 'set2': {'C', 'B', 'A'}}
num_str: !!str 15  # 强制转换为字符串。强制将数字转化为字符串。
str_num: !!int '1991'  # 字符串强制转换为数字。
boolean: !!bool 'true'  # 强制转换为布尔值
str_float: !!float '19.2345'  # 强制转换为浮点型。
#str_bin: !!binary 'v' # 强制转换为二进制
dic1: { 'A': 1,"B": 2 }  # 'dic1': {'A': 1, 'B': 2}}  能得到一个字典.<class 'dict'>
dic2: # 这也是一个字典.
  A: 2
  B: 3
not_tuple1: (1,2,3)  #  'tuple1': '(1,2,3)'  并不能直接得到一个元组.
not_tuple2: # 'tuple2': '1 2 3',也不能直接拿到一个元组.
  1
  2
  3
#tuple3: !!tuple 1,2,3  # 非法写法
A:  # 不能直接写A不带冒号,会报错。 写了冒号不写值,是一个没有值的键值对。
---   # 多文本了,读取方式要变,不然只能读取到这个上面的信息.
set3: 1
---  # 多文本2
data5: 2
1: 2

read_yaml_demo.py # 读取yaml文件的返回数据。

全部数据:{'text1': '字符串', 'person': [{'name': '张三'}, {'age': 18}, {'gender': '男'}, {'favorite': ['喝酒', '抽烟', '打游戏']}], 
'not_set1': {'A': None, 'B': None, 'C': None}, 'set2': {'B', 'C', 'A'}, 'num_str': '15', 'str_num': 1991, 'boolean': True, 
'str_float': 19.2345, 'dic1': {'A': 1, 'B': 2}, 'dic2': {'A': 2, 'B': 3}, 'not_tuple1': '(1,2,3)', 'not_tuple2': '1 2 3', 'A': None}
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
type:<class 'str'>          text1: 字符串
type:<class 'list'>         person: [{'name': '张三'}, {'age': 18}, {'gender': '男'}, {'favorite': ['喝酒', '抽烟', '打游戏']}]
type:<class 'dict'>         not_set1: {'A': None, 'B': None, 'C': None}
type:<class 'set'>          set2: {'B', 'C', 'A'}
type:<class 'str'>          num_str: 15
type:<class 'int'>          str_num: 1991
type:<class 'bool'>         boolean: True
type:<class 'float'>        str_float: 19.2345
type:<class 'dict'>         dic1: {'A': 1, 'B': 2}
type:<class 'dict'>         dic2: {'A': 2, 'B': 3}
type:<class 'str'>          not_tuple1: (1,2,3)
type:<class 'str'>          not_tuple2: 1 2 3
type:<class 'NoneType'>     A: None
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值