Python基礎(八) yaml在python中的使用

yaml 一般用來存儲數據,相似於json編程

 

YAML 簡介

 

YAML(Yet Another Markup Language),一種直觀的可以被電腦識別的數據序列化格式,是一個可讀性高而且容易被人類閱讀,容易和腳本語言交互,用來表達資料序列的編程語言。它參考了其它多種語言,包括:XML、C語言、Python、Perl以及電子郵件格式RFC2822,是相似於標準通用標記語言的子集XML的數據描述語言,語法比XML簡單不少。json

 因爲YAML使用空白字符和分行來分隔資料,使得它特別適合用 grep、Python、Perl、Ruby 操做。編程語言

 

適用場景

  1. 腳本語言

因爲實現簡單,解析成本很低,YAML 特別適合在腳本語言中使用。列一下現有的語言實現:Ruby,Java,Perl,Python,PHP,OCaml,JavaScript,除了Java,其餘都是腳本語言。編碼

  1. 序列化

YAML 比較適合作序列化。由於它是宿主語言數據類型直轉的。spa

  1. 配置文件

YAML 作配置文件也不錯。寫 YAML 要比寫 XML 快得多(無需關注標籤或引號),而且比 INI 文檔功能更強。scala

因爲兼容性問題,不一樣語言間的數據流轉建議不要用 YAML。code

 

語言比較

    1. XML
  1. 和 XML 相比,YAML 具備如下的優點
      1. 可讀性好
      2. 和腳本語言的交互性好
      3. 使用實現語言的數據類型
      4. 能夠基於流來處理
      5. 表達能力強,擴展性好
      6. XML 解析效率比較低,不過支持自定義的數據類型
  2. YAML相似於XML的數據描述語言,語法比XML簡單不少,YAML試圖用一種比XML更敏捷的方式,來完成XML所完成的任務。

 

    1. JSON
  1. JSON 的語法實際上是 YAML 的子集,大部分的 JSON 文件均可以被 YAML 的剖析器剖析。雖然大部分的數據分層形式也可使用相似 JSON 的格式,不過 YAML 並不建議這樣使用,除非這樣編寫能讓文件可讀性增長,更重要的是,YAML 的許多擴展在 JSON 是找不到的,如:進階資料形態、關係錨點、字串不須要引號、映射資料形態會儲存鍵值的順序等。
    1. INI
  2. INI文件由節、鍵、值組成。比較簡單,原生的 SHELL 難以解析

 

YAML 語法

YAML 使用可打印的 Unicode 字符,可以使用 UTF-8 和 UTF-16 編碼。對象

    • 使用空格 Space 縮進表示分層,不一樣層次之間的縮進可使用不一樣的空格數目,可是同層元素必定左對齊,即前面空格數目相同(不能使用 Tab,各個系統 Tab對應的 Space 數目可能不一樣,致使層次混亂)
    • ‘#’表示註釋,只能單行註釋,從#開始處到行尾
    • 破折號後面跟一個空格(a dash and space)表示列表
    • 用冒號和空格表示鍵值對 key: value
    • 簡單數據(scalars,標量數據)能夠不使用引號括起來,包括字符串數據。用單引號或者雙引號括起來的被看成字符串數據,在單引號或雙引號中使用C風格的轉義字符

 

yaml安裝:

pip install pyyamlblog

 

yaml格式,使用縮進對格式進行要求,不容許使用tab,只能使用空格,來肯定子項,同級,等等。ip

標籤和值之間要有一個空格,要否則會當成一個字符串,不會當成是標籤項。

userInfo:
   name: yhleng
   password: q123456

phone: 13718651887

加載yaml數據   

    path = os.path.join(sys.path[0],'test.yaml')
    f = open(path)
    x = yaml.load(f)
    
print x['userInfo']['name']

返回字典對象:

{'phone': 13718651887L, 'userInfo': {'password': 'q123456', 'name': 'yhleng'}}

輸出:

相關文章
相關標籤/搜索