目录
YAML格式YAML文件YAML操作读取存储示例转字典转列表YAML是一种数据序列化格式,方便人类阅读,且容易和脚本语言交互。常用于配置文件,也用于数据存储或传输。
YAML格式
YAML三种基本数据类型:
1.标量:如字符串、整数和浮点数、日期
(资料图)
布尔值:“true”、“True”、“TRUE”、“yes”、“Yes"和"YES”,“false”、“False”、“FALSE”、“no”、“No"和"NO”空:null、Null、~
或不指定值;
2.数组:使用前导符号-
表示,且符号与值间要有空格;
3.对象:键值对集合;用冒号+空格:
分割;
YAML文件
文件基本规则:
区分大小写;
使用缩进表示层级关系:
缩进要用空格(非Tab);相同层级元素要左对齐;字符串不需要使用引号括起,但有特殊字符串(如空格、冒号等)时必须使用引号;
使用#
注释;
一个文件中可包含多份YAML文档:
用---
(即三个中划线)表示一份文档的开始;
[可选]用...
(即三个小数点)表示一份文档的结束;
---
# 这是第一份文档
one: 1
# 其他内容...
...---
# 这是第二份文档
two: 2
# 其他内容...
YAML操作
Python中有两个YAML模块:PyYAML和ruamel.yaml(pip3 install pyyaml
,pip3 install ruamel.yaml
)。
读取
通过load函数可方便加载文档内容,返回的内容可能是字典、列表或空:
import yaml def 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.yaml def 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: Mike age: 12 - name: luce age: 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: mike age: 24 - name: tom age: 30
返回的值为:
[
{
"name": "mike",
"age": 24
},
{
"name": "tom",
"age": 30
}
]
到此这篇关于Python YAML文件的读写操作详解的文章就介绍到这了,更多相关Python YAML文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
X 关闭
X 关闭
- 1亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 2现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 3如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 4AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 5转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 6充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 7好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 8名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?
- 9亚马逊云科技成立量子网络中心致力解决量子计算领域的挑战
- 10京东绿色建材线上平台上线 新增用户70%来自下沉市场