这两天玩欧冠数据, 看到数据格式是.yml结尾的文件, 就查了下什么是yaml文件,Python怎么操作
yaml文件简述
yaml: Yet Another Markup Language, 一种基于Unicode容易阅读的、与脚本交互的用于表达资料序列的编程语言。类似于XML,但语法比XML简单得多
适用场景:
A、脚本语言 B、序列化 C、配置文件:yaml比XML好编写,比ini文件功能强,但不同语言数据流不建议用。
优缺点:
A、易于阅读
B、可移植性
C、匹配敏捷的本机数据结构
D、单程处理
E、表现力和可扩展性 + 易于实现和引用
Python操作
读操作:
yaml.load()
创建 yaml文件 "1.yml", 写入如下数据:
name: Tom Smith
age:37spouse:
name: Jane Smith
age:25children:-name: Jimmy Smith
age:15
-name1: Jenny Smith
age1:12
In [21]: with open('1.yml', 'r') as f:
...: yaml_obj= yaml.load(f, Loader=yaml.SafeLoader)
...:
In [22]: yaml_obj
如果使用yaml.load(f) ,会报warning: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details. (就是提示 直接load是不安全的, 具体load参数可以参考 https://github.com/yaml/pyyaml/wiki/PyYAML-yaml.load(input)-Deprecation#footnotes)
yaml.load_all() #生成一个迭代器
写操作:
yaml.dump(data_obj, file_obj) #类似于pickle
yaml.dump_all([data1_obj, data2_obj], file_obj) #多个数据对象,以流形式写入#示例, 环境是ipython,就会有"..:" 出现:
data_dict ={
...:"name": "leron james",
...:"age": 35,
...:"hobby": ["dancing", "rap", "basketball"]
...: }
f= open('1.yml', 'w')
yaml.dump(data_dict, f)
yaml语法简述
基本语法
A、大小写敏感
B、缩进表示层级关系,且: 缩进只使用空格,不适用Tab; 缩进多少空格不重要, 重要的是同层元素左对齐
C、# 后表示注释,到行尾都是注释,且只能单行注释
D、: 冒号表示 k-v关系,形式: key:value
E、破折号“-”后加空格,表示列表:
例如:
- name
- age
- sex
就是Python里的 ["name", "age", "sex"]
F、简单数据(scalars,标量数据)可以不使用引号括起来,包括字符串数据。用单引号或者双引号括起来的被当作字符串数据,在单引号或双引号中使用C风格的转义字符
yaml -> Python dict
yaml:
name: lebron james
age:36sex:male
Python dict:
{"name": "lebron james", "age":36, "sex":"male"}
yaml list -> Python list
yaml :-name-age-sex#Python list
["name", "age", "sex"]