这两天玩欧冠数据, 看到数据格式是.yml结尾的文件, 就查了下什么是yaml文件,Python怎么操作
  1. yaml文件简述
            yaml: Yet Another Markup Language, 一种基于Unicode容易阅读的、与脚本交互的用于表达资料序列的编程语言。类似于XML,但语法比XML简单得多
  •    适用场景:
            A、脚本语言    B、序列化        C、配置文件:yaml比XML好编写,比ini文件功能强,但不同语言数据流不建议用。
 
  •   优缺点:
            A、易于阅读    
            B、可移植性
            C、匹配敏捷的本机数据结构
            D、单程处理
            E、表现力和可扩展性 + 易于实现和引用
 
  1. Python操作
 
  •  读操作:
yaml.load()
        创建 yaml文件 "1.yml", 写入如下数据:
 
name: Tom Smith
age: 37
spouse:
    name: Jane Smith
    age: 25
children:
- 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)  

 

 
 
 
  1. 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:
36 sex:male Python dict:
{
"name": "lebron james", "age":36, "sex":"male"}

 

 
  • yaml list ->  Python list
yaml :
- name
- age
- sex
 
# Python list
["name", "age",  "sex"]

 

           
 
  • list 和 dict 符合结构
       
# list 内嵌 dict
#      yaml
- name:lebron
  sex:male
  age:36
 
- name:kobe
  sex:male
  age:42
 
 
Python :
  
[ {"name":"lebron", "sex": "male", "age":36}, {"name":"kobe", "sex": "male", "age":42}]

 

          
 
# list 嵌套
- ["a", "b","c"]
- ["name", "age", "sex"]
- ["lebron", "james", " kobe"]
 
# python :
[ ["a", "b","c"], ["name", "age", "sex"], ["lebron", "james", " kobe"]]