文章目录

  • 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. 读完ACL 2019录取的30篇知识图谱论文,我发现了这5点趋势
  2. JavaScript 技术篇-js通过xpath获取dom节点,js校验xpath唯一性
  3. java轻量级Http Server
  4. .net 后台 下载 图片_特殊的 “图片软件” !
  5. util中注入service
  6. alxctools索引超出了数组界限_[译]V8中的数组类型
  7. chrome自定义背景_Android Chrome自定义标签
  8. python如何退出模块_如何将一个 Python 函数进行模块化封装
  9. NYOJ--218--Dinner(含题目意思)
  10. 海思3516A bt1120 视频输入相关总结
  11. nginx配置-优化静态资源
  12. Unity3D FPS游戏之子弹贴图
  13. 今日分享—————论成长性思维对人的重要性
  14. CTFHub SSRF总结
  15. 考研 | 一战南大软院险进复试后失利被刷,调剂国科大杭高院荣幸上岸
  16. 就业协议服务器是什么意思,什么是就业协议
  17. 华为手机卡在升级界面_华为手机停在开机画面的解决方法【图文教程】
  18. Mac node切换版本,指定版本
  19. CRMEB小程序商城源码安装后,个人中心推广海报不显示处理方法!
  20. NOIP-2018 提高组(复赛) 模拟试题之--T1 帽子戏法

热门文章

  1. 【Python】Python八种数据导入方法,你掌握了吗?
  2. 2022无线蓝牙耳机排行榜,2022最值得入手的蓝牙耳机品牌
  3. java字符串转换成字节数组_将Java字符串转换为字节数组
  4. 中国移动苏州软件测试,【中移苏研软件测试工程师面试】中国移动苏研研发一面。-看准网...
  5. APP自动化测试-12.Appium日志分析(原理)
  6. 使用Glimpse 监测ASP.NET MVC网站
  7. element-ui 密码框显示小眼睛,点击可查看密码
  8. python 动态列表_做动态图表,没有数据?用Python就能获取!
  9. Web实现:仿QQ注册页
  10. 华为云 云速邮箱教学第一步