day5模塊學習--yaml文件處理


yaml文件處理(http://pyyaml.org/wiki/PyYAMLDocumentation)

    摘要: 本文講的是yaml在python上的使用教程詳解, YAML是一種容易人類閱讀、適合表示程序語言的數據結構、可用於不同程序間交換數據、支持泛型工具、支持串行處理、豐富的表達能力和可擴展性、易於使用的語言。YAML利用縮進或者是explicit indicatior(如{})來表示屬。

    YAML是一種容易人類閱讀、適合表示程序語言的數據結構、可用於不同程序間交換數據、支持泛型工具、支持串行處理、豐富的表達能力和可擴展性、易於使用的語言。YAML利用縮進或者是explicit indicatior(如{})來表示屬性的嵌套,更為直觀和simple。

    YAML用來做配置文件,很多項目的配置文件都是yaml文件格式。

  一、YAML的格式

 

  YAML的格式及特點如下:

 

  YAML使用可打印的Unicode字元,可使用UTF-8或UTF-16。
  使用空白字元為文件縮排來表示結構;不過不能使用跳格字元(TAB)。
  注解由井字號( # )開始,可以出現在一行中的任何位置,而且范圍只有一行(也就是一般所謂的單行注解)
  每個清單成員以單行表示,並用短杠+空白( -   )起始。或使用方括號( [ ] ),並用逗號+空白( ,   )分開成員。
  每個雜湊表的成員用冒號+空白( :   )分開鍵值和內容。或使用大括號( {   } ),並用逗號+空白( ,   )分開。
  雜湊表的鍵值可以用問號 ( ? )起始,用來明確的表示多個詞匯組成的鍵值。
  字串平常並不使用引號,但必要的時候可以用雙引號 ( " )或單引號 ( ' )框住。
  使用雙引號表示字串時,可用倒斜線( \ )開始的跳脫字元(這跟C語言類似)表示特殊字元。
  區塊的字串用縮排和修飾詞(非必要)來和其他資料分隔,有新行保留(preserve)(使用符號 | )或新行折疊(flod)(使用符號 > )兩種方式。
  在單一檔案中,可用連續三個連字號(---)區分多個檔案。
  另外,還有選擇性的連續三個點號( ... )用來表示檔案結尾。
  重復的內容可使從參考標記星號 ( * )復制到錨點標記( & )。
  指定格式可以使用兩個驚嘆號 ( !! ),后面接上名稱。
  檔案中的單一文件可以使用指導指令,使用方法是百分比符號( % )。有兩個指導指令在YAML1.1版中被定義:
   %YAML 指導指令,用來識別文件的YAML版本。
   %TAG 指導指令,被用在URI的字首標記。這個方法在標記節點的型態時相當有用。
  YAML再使用逗號及冒號時,后面都必須接一個空白字元。

  二、PyYAML的使用

  1、安裝

  python下安裝PyYAML模塊可以使用YAML ,打開https://pypi.python.org/pypi/PyYAML下載,當前版本3.11 。pypi 站點上對該模塊的描述如下:PyYAML features a complete YAML 1.1 parser, Unicode support, pickle support, capable extension API, and sensible error messages 。

  可以連網的主機也可以通過pip install pyyaml 或easy_install pyymal 進行安裝。

  2、yaml.load與yaml.dump方法

  該模塊提供了一些方法,不過常用的方法只有兩個yaml.load和yaml.dump,以下是一個版本相關的yaml格式文件:

yaml文件:
treeroot: branch1: name: Node
1 branch1-1: name: Node 1-1 branch2: name: Node 2 branch2-1: name: Node 2-1 程序處理: import yaml with open("yaml文件","r") as f: message = yaml.load(f) print(type(message),message) 運行結果如下: <class 'dict'> {'treeroot': {'branch1': {'name': 'Node 1', 'branch1-1': {'name': 'Node 1-1'}}, 'branch2': {'name': 'Node 2', 'branch2-1': {'name': 'Node 2-1'}}}}

  yuml.dump方法:

    這里還承接上面的腳本,調用里面的dataMap 數據,將其保存一直新的yaml 文件,如下:

    import yaml
  with open("yaml文件","r") as f:

  message = yaml.load(f)

  f1 = open("new_yaml.yaml","w")
  yaml.dump(message,f1)
  f1.close()

    new_yaml.yaml的結果如下:

    treeroot:
    branch1:
      branch1-1: {name: Node 1-1}
      name: Node 1
    branch2:
      branch2-1: {name: Node 2-1}
      name: Node 2
 

    三、yaml 在python語言中的應用

    yaml 語言在很多優秀的python 程序中都有使用,比如運維工程師經常使用的兩個自動化工作saltstack 與 Ansible 。更多PyYAML 模塊的用法,也可以查看其官方wiki頁 

  YAML的適用范圍

  由於實現簡單,解析成本很低,YAML特別適合在腳本語言中使用.列一下現有的語言現現:Ruby,Java,Perl,Python,PHP,OCaml,JavaScript。除了Java,其他都是腳本語言.YAML比較適合做序列化。因為它是宿主語言數據類型直轉的。

  YAML做配置文件也不錯。比如Ruby on Rails的配置就選用的YAML。對ROR而言,這很自然,也很省事.由於兼容性問題,不同語言間的數據流轉建議現在不要用YAML.

    YAML文件及處理:

yaml文件:
name: Tom Smith
age: 37
spouse:
    name: Jane Smith
    age: 25
children:
 - name: Jimmy Smith
   age: 15
 - name1: Jenny Smith
   age1: 12
 - work: dataanalysis
   date: 2017-5-18

#yaml處理腳本
import yaml

f = open("new_yaml.yaml","r")
message = yaml.load(f)
f.close()
print(message)

運行結果如下:
{'name': 'Tom Smith', 'spouse': {'name': 'Jane Smith', 'age': 25}, 'age': 37, 'children': [{'name': 'Jimmy Smith', 'age': 15}, {'age1': 12, 'name1': 'Jenny Smith'}, {'date': '2017-5-18', 'work': 'dataanalysis'}]}

    從上面可以看出,"-"代表統計,生成的時候會是一個列表的形式,這樣可用於字典下面嵌套列表,文件前面有幾個"-"代表嵌套了幾層字典。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM