這兩天玩歐冠數據, 看到數據格式是.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: 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)

-
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"]]