相关文章推荐

Python3操作YAML文件格式方法解析

作者:临渊

这篇文章主要介绍了Python3操作YAML文件格式方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

数据及配置文件之争

数据及文件通常有三种类型:

  • 配置文件型:如ini,conf,properties文件,适合存储简单变量和配置项,最多支持两层,不适合存储多层嵌套数据
  • 表格矩阵型:如csv,excel等,适合于存储大量同类数据,不适合存储层级结构的数据
  • 多层嵌套型:如XML,HTMl,JSON、YAML,TOML等,适合存储单条或少数多层嵌套数据,不适合存储大量数据

    YAML兼容JSON格式,简洁,强大,灵活,可以很方便的构造层级数据并快速转为Python中的字典。

    YAML简介

    YAML(YAML Ain't Markup Language)即一种反标记(XML)语言。强调数据为中心,而非标记。YAML大小写敏感,使用缩进代表层级关系。

    YAML中支持对象Object(对应Python中的字典), 数组Array(对应Python中的列表)以及常量(字符串、数字(int/float),true/false/null)。

    相比于JSON格式,YAML免除了双引号,逗号,大括号,中括号等,(当然也支持原始的JSON格式),并且支持注释,类型转换,跨行,锚点,引用及插入等等。

  • 对象:使用key: value表示,冒号后面有一个空格,也可以是使用{key: value}(flow流格式)或{"key": "value"}表示
  • 数组:使用- value表示,-后面有一个空格,每项一行,也可以使用[value1,value2,value3,...] (flow流格式)或["value1", "value2", "value3", ...]
  • 字符串:abc或"abc"
  • 数字:123或123.45
  • true/false:true/false,TRUE/FALSE,True/False或on/off, ON/OFF, On/Off
  • null: null,NULL, Null或~

    示例文件demo.yaml:

    # 注释:示例yaml文件 name: Cactus age: 18 skills: - Python - Java has_blog: true gf: ~

    相当于以下JSON格式

    "name": "Cactus", "age": 18, "skills": [ "Python", "Java", "has_blog": true, "gf": null

    使用!!str, !!float等可以将默认类型转为指定类型,如

  • - !!float 3
  • - !!str 4
  • - !!str true

    对应JSON格式

    "true"

    多行文本及拼接

  • | 保留多行文本(保留换行符)
  • > 将多行拼接为一行
  • 才怪对应JSON格式

    "a": "我\n喜欢你\n", "b": "我 不喜欢你 才怪"

    锚点,引用及插入

    在-或:后 加上&锚点名为当前字段建立锚点,下面可使用*锚点名引用锚点,或使用<<: *锚点名直接将锚点数据插入到当前的数据中,示例如下:

    users: name: 张三 password: !!str 123456 name: 李四 password: abcdefg case1: login: *zs case2: user: <<: *ls age: 20

    对应JSON格式:

    "users": [ "name": "张三", "password": "123456" "name": "李四", "password": "abcdefg" "case1": { "login": { "name": "张三", "password": "123456" "case2": { "user": { "name": "李四", "password": "abcdefg", "age": 20

    Python操作YAML文件及字符串

    需要安装pyyaml, pip install pyyaml

    和JSON文件类似,yaml也提供load和dump两种方法。

  • yaml.load()或yaml.safe_load(YAML字符串或文件句柄):yaml -> 字典,如yaml中有中文,需要使用 字符串.encode('utf-8')或打开文件时指定encoding='utf-8'
  • yaml.dump(字典):默认为flow流格式,即字典{b': {'c': 3, 'd': 4}},会被转为b: {c: 3, d: 4}形式,可以使用default_flow_style=False关闭流模式
  • 由于yaml.load()支持原生Python对象,不安全,建议使用yaml.safe_load()

    示例1:yaml字符串 -> 字典

    import yaml yaml_str = ''' name: Cactus age: 18 skills: - Python - Java has_blog: true gf: ~ print(yaml.safe_load(yaml_str))

    打印结果:

    {'name': 'Cactus', 'age': 18, 'skills': [['Python', 3], ['Java', 5]], 'has_blog': True, 'gf': None}

    如果有中文,可以使用yaml.load(yaml_str.encoding('utf-8))

    示例2:yaml文件 -> 字典
    import yaml with open('demo.yaml', encoding='utf-8') as f: # demo.yaml内容同上例yaml字符串 print(yaml.safe_load(f))

    打印结果同上例。

    字典 -> yaml字符串或文件
    import yaml dict_var = {'name': 'Cactus', 'age': 18, 'skills': [['Python', 3], ['Java', 5]], 'has_blog': True, 'gf': None} print(yaml.dump(dict_var,)) # 转为字符串,使用默认flow流格式 with open('demo5.yaml', 'w', encoding='utf-8') as f: yaml.dump(dict_var, f, default_flow_style=False) # 写入文件,不是用flow流格式

    打印内容:

    age: 18
    gf: null
    has_blog: true
    name: Cactus
    skills:
    - [Python, 3]
    - [Java, 5]

    1demo5.yaml1文件内容:

    age: 18
    gf: null
    has_blog: true
    name: Cactus
    skills:
    - - Python
    - - Java

    更多操作可参考pyyaml官方文档: https://pyyaml.org/wiki/PyYAMLDocumentation

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
  • Python自定义对象实现切片功能
    Python自定义对象实现切片功能
    2021-12-12
  • Python OpenCV特征检测之特征匹配方式详解
    Python OpenCV特征检测之特征匹配方式详解
    2021-12-12
  • 详解python读取matlab数据(.mat文件)
    详解python读取matlab数据(.mat文件)
    2021-12-12
  • Python实现过迷宫小游戏示例详解
    Python实现过迷宫小游戏示例详解
    2021-12-12
  • python操作yaml的方法详解
    python操作yaml的方法详解
    2021-12-12
  • Python的输入,输出和标识符详解
    Python的输入,输出和标识符详解
    2021-12-12
  • Python爬取csnd文章并转为PDF文件
    Python爬取csnd文章并转为PDF文件
    2021-12-12
  • Python制作简易聊天器,搭建UDP网络通信模型
    Python制作简易聊天器,搭建UDP网络通信模型
    2021-12-12
  • 美国设下计谋,用娘炮文化重塑日本,已影响至中国
    美国设下计谋,用娘炮文化重塑日本,已影响至中国
    2021-11-19
  • 时空伴随者是什么意思?时空伴随者介绍
    时空伴随者是什么意思?时空伴随者介绍
    2021-11-09
  • 工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    2021-11-05
  • 2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2021-10-26
  • 电脑版 - 返回首页

    2006-2023 脚本之家 JB51.Net , All Rights Reserved.
    苏ICP备14036222号

     
    推荐文章