Python I/O ————yaml文件操做

    這兩天玩歐冠數據, 看到數據格式是.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"]]
 
相關文章
相關標籤/搜索