文章目录

  • YAML格式
    • YAML文件
  • YAML操作
    • 读取
    • 存储
    • 示例
      • 转字典
      • 转列表

YAML是一种数据序列化格式,方便人类阅读,且容易和脚本语言交互。常用于配置文件,也用于数据存储或传输。

YAML格式

YAML三种基本数据类型:

  • 标量:如字符串、整数和浮点数、日期

    • 布尔值:“true”、“True”、“TRUE”、“yes”、“Yes"和"YES”,“false”、“False”、“FALSE”、“no”、“No"和"NO”
    • 空:null、Null、~或不指定值;
  • 数组:使用前导符号-表示,且符号与值间要有空格;
  • 对象:键值对集合;用冒号+空格: 分割;

YAML文件

文件基本规则:

  • 区分大小写;
  • 使用缩进表示层级关系:
    • 缩进要用空格(非Tab);
    • 相同层级元素要左对齐;
  • 字符串不需要使用引号括起,但有特殊字符串(如空格、冒号等)时必须使用引号;
  • 使用#注释;

一个文件中可包含多份YAML文档:

  • ---(即三个中划线)表示一份文档的开始;
  • [可选]用...(即三个小数点)表示一份文档的结束;
---
# 这是第一份文档
one: 1
# 其他内容...
...---
# 这是第二份文档
two: 2
# 其他内容...

YAML操作

Python中有两个YAML模块:PyYAML和ruamel.yaml(pip3 install pyyamlpip3 install ruamel.yaml)。

读取

通过load函数可方便加载文档内容,返回的内容可能是字典、列表或空:

import yamldef readYaml(file):  # -> Union[dict, list, None]:with open(file, 'r', encoding='utf-8') as f:return yaml.load(f, yaml.Loader)

若文件中有多个文档,需要使用load_all来加载;此时返回的是一个生成器,需要一次获取每个文档:

def readAllDoc(file) -> list:with open(file, 'r', encoding='utf-8') as f:docs = yaml.load_all(f, yaml.Loader)# return [d for d in docs]return list(docs)

存储

yaml.dump()方法不会将列表或字典数据进行转化yaml标准模式。需要通过ruamel.yaml来生成标准的yaml文档。

import ruamel.yamldef createYaml(file, data: dict):with open(file, 'w', encoding='utf-8') as f:writer = ruamel.yaml.YAML()writer.indent(mapping=2, sequence=4, offset=2)writer.dump(data, f)

通过dump_all可把数组中的每个元素序列化为一个文档:

def createAllDoc(file, data: list):with open(file, 'w', encoding='utf-8') as f:writer = ruamel.yaml.YAML()writer.indent(mapping=2, sequence=4, offset=2)writer.dump_all(data, f)

[{'name': 'Mike', 'age': 12}, {'name': 'luce', 'age': 15}]序列化。

dump会生成如下包含数组元素的yaml文件:

  - name: Mikeage: 12- name: luceage: 15

dump_all会生成如下yaml文件(包含两个文档):

name: Mike
age: 12
---
name: luce
age: 15

示例

yaml读取后为列表或字典。

转字典

读取的内容为一个字典:

name: mike
age: 25
score: 80.5

返回的值为:

{"name": "mike","age": 25,"score": 80.5
}

获取里面值,先判断是否存在,再读取:

if 'name' in data:print(data['name'])

转列表

读取内容为一个列表:

- name: mikeage: 24
- name: tomage: 30

返回的值为:

[{"name": "mike","age": 24},{"name": "tom","age": 30}
]

[Python]读写YAML文件相关推荐

  1. Python读写yaml文件(使用PyYAML库)

    一,YAML 简介 YAML,Yet Another Markup Language的简写,通常用来编写项目配置,也可用于数据存储,相比conf等配置文件要更简洁. 二,YAML 语法 支持的数据类型 ...

  2. python读写压缩文件使用gzip和bz2

    python读写压缩文件使用gzip和bz2 #读取压缩文件 # gzip compression import gzip with gzip.open('somefile.gz', 'rt') as ...

  3. python 对 yaml 文件操作

    python 对 yaml 文件操作 #!/usr/bin/env python # -*- encoding: utf-8 -*- """ @Introduce : p ...

  4. python读取csv文件的方法-python读写csv文件的方法

    1.爬取豆瓣top250书籍 import requests import json import csv from bs4 import BeautifulSoup books = [] def b ...

  5. python处理excel教程实例-python 读写excel文件操作示例【附源码下载】

    本文实例讲述了python 读写excel文件操作.分享给大家供大家参考,具体如下: 对excel文件的操作,python有第三方的工具包支持,xlutils,在这个工具包中包含了xlrd,xlwt等 ...

  6. csv 字符串_爬虫|python读写csv文件的方法完成生涯规划表

    前面用PrettyTable制作了生涯规划表,今天突然想到其实可以用Python读写Excel文件,还可以制作Excel表格,相对而言,感觉csv的读写更简单,所以决定用csv改写生涯规划案例,以后教 ...

  7. Python读写docx文件(三十五)

    Python读写docx文件 Python读写word文档有现成的库可以处理 pip install python-docx安装一下. https://python-docx.readthedocs. ...

  8. 三十一、Python读写docx文件

    @Author:Runsen 文章目录 Python读写docx文件 Python读写docx文件 Python读写word文档有现成的库可以处理 pip install python-docx安装一 ...

  9. python生成yaml文件_Python实践34-读写yaml文件

    关于yaml YAML语言的设计目标,就是方便人类读写.如果你想要实现一些用ini不好做到的配置,可以使用yaml格式作为配置文件 大小写敏感 使用缩进表示层级关系 缩进时不允许使用Tab键,只允许使 ...

最新文章

  1. Debian/Ubuntu/Raspbian 时间同步
  2. Android镜像文件的拆解
  3. Java中的与、或、非以及异或( | ~ ^)运算符的运算原理
  4. 嵌入式开发概述(树莓派介绍)
  5. CDH5.16.2下载安装
  6. ALAsset 循环获取图片(Assets Library Framework)
  7. 如何将JavaScript日期转换为UTC?
  8. 字符串API中的split,substr,substring
  9. guid会重复么_饿了么请你考虑一下消费者
  10. VC++6.0安装番茄助手Visual Assist X和VC6LineNumberAddin的方法
  11. Java开发逻辑思维题
  12. PowerBI-筛选器函数-KEEPFILTERS
  13. mmdetection tools工具梳理
  14. android自定义控件
  15. APS车间排产软件实现企业生产数据可视化
  16. 日历控件修改的JS代码
  17. 台式计算机开机风扇不转,电脑开机显卡风扇不转是怎么回事|电脑开机风扇不转的解决方法...
  18. 数字功放和模拟功放有哪些区别
  19. 从eclipse官网下载32位eclipse并配置tomcat
  20. 天平游码读数例题_天平使用练习题

热门文章

  1. java 对json 格式做参数格式校验
  2. SAP FUNCTION ALV、SALV开发总结
  3. 微信小程序开发步骤+底部菜单栏制作
  4. Linux 命令(89)—— less 命令
  5. 关于select函数超时时间问题
  6. MultipartFile 支持什么类型_因为卡,白白换了六台电脑,原来重装系统如此简单!支持所有系统...
  7. 搭建TinyTiny rss服务
  8. 用Mac自带的启动转换助理(Boot Camp)安装Windows10企业版的方法 MacBook Air
  9. 【Tanh的标量实现】
  10. Eclipse中syso 快捷键 Alt + / 不能使用的问题