国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Linux > 正文

yaml在python上的使用教程詳解

2024-08-27 23:59:39
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

yaml在python上的使用估計(jì)很多的朋友不知道吧,下面小編來(lái)為各位介紹一篇yaml在python上的使用教程,希望文章對(duì)各位有用.

YAML是一種容易人類閱讀、適合表示程序語(yǔ)言的數(shù)據(jù)結(jié)構(gòu)、可用于不同程序間交換數(shù)據(jù)、支持泛型工具、支持串行處理、豐富的表達(dá)能力和可擴(kuò)展性、易于使用的語(yǔ)言,YAML利用縮進(jìn)或者是explicit indicatior(如{})來(lái)表示屬性的嵌套,更為直觀和simple.

一、YAML的格式

YAML的格式及特點(diǎn)如下:YAML使用可打印的Unicode字元,可使用UTF-8或UTF-16,使用空白字元為文件縮排來(lái)表示結(jié)構(gòu),不過(guò)不能使用跳格字元(TAB).

注解由井字號(hào)( # )開(kāi)始,可以出現(xiàn)在一行中的任何位置,而且范圍只有一行,也就是一般所謂的單行注解,每個(gè)清單成員以單行表示,并用短杠+空白( -   )起始,或使用方括號(hào)( [ ] ),并用逗號(hào)+空白( ,   )分開(kāi)成員。

每個(gè)雜湊表的成員用冒號(hào)+空白( :   )分開(kāi)鍵值和內(nèi)容。或使用大括號(hào)( {   } ),并用逗號(hào)+空白( ,   )分開(kāi)。

雜湊表的鍵值可以用問(wèn)號(hào) ( ? )起始,用來(lái)明確的表示多個(gè)詞匯組成的鍵值,字串平常并不使用引號(hào),但必要的時(shí)候可以用雙引號(hào) ( " )或單引號(hào) ( ' )框住。

使用雙引號(hào)表示字串時(shí),可用倒斜線( / )開(kāi)始的跳脫字元(這跟C語(yǔ)言類似)表示特殊字元,區(qū)塊的字串用縮排和修飾詞(非必要)來(lái)和其他資料分隔,有新行保留(preserve)(使用符號(hào) | )或新行折疊(flod)(使用符號(hào) > )兩種方式。

在單一檔案中,可用連續(xù)三個(gè)連字號(hào)(---)區(qū)分多個(gè)檔案,另外,還有選擇性的連續(xù)三個(gè)點(diǎn)號(hào)( ... )用來(lái)表示檔案結(jié)尾,重復(fù)的內(nèi)容可使從參考標(biāo)記星號(hào) ( * )復(fù)制到錨點(diǎn)標(biāo)記( & ),指定格式可以使用兩個(gè)驚嘆號(hào) ( !! ),后面接上名稱。

檔案中的單一文件可以使用指導(dǎo)指令,使用方法是百分比符號(hào)( % ),有兩個(gè)指導(dǎo)指令在YAML1.1版中被定義:

%YAML 指導(dǎo)指令,用來(lái)識(shí)別文件的YAML版本.

%TAG 指導(dǎo)指令,被用在URI的字首標(biāo)記,這個(gè)方法在標(biāo)記節(jié)點(diǎn)的型態(tài)時(shí)相當(dāng)有用.

YAML再使用逗號(hào)及冒號(hào)時(shí),后面都必須接一個(gè)空白字元.

二、PyYAML的使用

1、安裝

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

可以連網(wǎng)的主機(jī)也可以通過(guò)pip install pyyaml 或easy_install pyymal 進(jìn)行安裝。

2、yaml.load與yaml.dump方法

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

  1. [root@361way yaml]# cat tree.yaml 
  2.  
  3. treeroot: 
  4.  
  5.     branch1: 
  6.  
  7.         name: Node 1 
  8.  
  9.         branch1-1: 
  10.  
  11.             name: Node 1-1 
  12.  
  13.     branch2: 
  14.  
  15.         name: Node 2 
  16.  
  17.         branch2-1: 
  18.  
  19.             name: Node 2-1 

yaml.load方法:

  1. # 腳本內(nèi)容 
  2.  
  3. [root@361way yaml]# cat load.py 
  4.  
  5. import yaml 
  6.  
  7. f = open('tree.yaml') 
  8.  
  9. dataMap = yaml.load(f) 
  10.  
  11. f.close() 
  12.  
  13. print dataMap 
  14.  
  15. # 執(zhí)行結(jié)果如下 
  16.  
  17. [root@361way yaml]# python load.py 
  18.  
  19. {'treeroot': {'branch2': {'branch2-1': {'name': 'Node 2-1'}, 'name': 'Node 2'}, 'branch1': {'branch1-1': {'name': 'Node 1-1'}, 'name': 'Node 1'}}} 

yuml.dump方法:

這里還承接上面的腳本,調(diào)用里面的dataMap 數(shù)據(jù),將其保存一直新的yaml 文件,如下:

  1. # 代碼如下: 
  2. f = open('newtree.yaml'"w"
  3. yaml.dump(dataMap, f) 
  4. f.close() 
  5. #newtree.yaml 的結(jié)果如下 
  6. [root@361way yaml]# cat newtree.yaml 
  7. treeroot: 
  8.   branch1: 
  9.     branch1-1: {name: Node 1-1} 
  10.     name: Node 1 
  11.   branch2: 
  12.     branch2-1: {name: Node 2-1} 
  13.     name: Node 2 

除此之外,還有safe_load、safe_dump、load_all 等主法,具體可以通過(guò)pydoc yaml 進(jìn)行查看.

三、yaml、xml與json 

1、yaml 與xml

以下是同一內(nèi)容,分別使用xml 語(yǔ)言標(biāo)記與 yaml 語(yǔ)言標(biāo)記:

  1. # xml標(biāo)記兩個(gè)site 
  2.  
  3. <site> 
  4.  
  5.     <name>sina</name> 
  6.  
  7.     <url>http://m.survivalescaperooms.com </url> 
  8.  
  9. </site> 
  10.  
  11. <site> 
  12.  
  13.     <name>google</name> 
  14.  
  15.     <url>http://m.survivalescaperooms.com</url> 
  16.  
  17. </site> 
  18.  
  19. # 使用yaml標(biāo)記兩個(gè)site 
  20.  
  21. --- 
  22.  
  23. site: 
  24.  
  25.     name: sina 
  26.  
  27.     url : http://m.survivalescaperooms.com  
  28.  
  29. --- 
  30.  
  31. site: 
  32.  
  33.     name: google 
  34.  
  35.     url : http://m.survivalescaperooms.com 
  36.  
  37. # 使用yaml標(biāo)記兩個(gè)site 
  38.  
  39. --- 
  40.  
  41. site: {name: sina, url: http://www.111cn.net } 
  42.  
  43. --- 
  44.  
  45. site: {name: google, url: http://www.111cn.net} 

從讀取查看的角度來(lái)看,有沒(méi)有發(fā)現(xiàn)yaml 相對(duì)xml 語(yǔ)言的優(yōu)勢(shì).

2、yaml 與 json

準(zhǔn)確的說(shuō)json 應(yīng)該算是yaml 標(biāo)準(zhǔn)下的一個(gè)字集,通過(guò)python語(yǔ)句可以很方面的在兩者之間進(jìn)行轉(zhuǎn)換.

a、轉(zhuǎn)換YAML到JSON

  1. # python -c 'import sys, yaml, json; json.dump(yaml.load(sys.stdin), sys.stdout, indent=4)' < file.yaml > file.json 
  2.  
  3. 或 
  4.  
  5. #!/usr/bin/env python 
  6.  
  7. import yaml,json 
  8.  
  9. yml = """ 
  10.  
  11. --- 
  12.  
  13.   foo: bar 
  14.  
  15. """ 
  16.  
  17. data = yaml.load(yml) 
  18.  
  19. json = json.dumps(data) 
  20.  
  21. print(json) 

b、轉(zhuǎn)換JSON到Y(jié)AML

  1. # python -c 'import sys, yaml, json; yaml.dump(json.load(sys.stdin), sys.stdout, default_flow_style=False)' < file.json > file.yaml 
  2.  
  3. 或 
  4.  
  5. #!/usr/bin/env python 
  6.  
  7. import json,yaml 
  8.  
  9. str = '{ "foo": "bar" }' 
  10.  
  11. data = json.loads(str) 
  12.  
  13. yml = yaml.safe_dump(data) 
  14.  
  15. print(yml) 

:很多情況下,甚至可以直接將json后綴的文件改為yaml 后綴,使用yaml 語(yǔ)言直接解析.

四、yaml 在python語(yǔ)言中的應(yīng)用

yaml 語(yǔ)言在很多優(yōu)秀的python 程序中都有使用,比如運(yùn)維工程師經(jīng)常使用的兩個(gè)自動(dòng)化工作saltstack 與 Ansible,更多PyYAML 模塊的用法,也可以查看其官方wiki 頁(yè).

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 马鞍山市| 电白县| 湄潭县| 屏南县| 高平市| 隆安县| 额敏县| 中超| 正蓝旗| 普兰店市| 安国市| 城市| 巴青县| 庆城县| 当雄县| 宣汉县| 汶川县| 淮北市| 通河县| 南昌县| 丰都县| 乾安县| 南丹县| 沈阳市| 衡阳县| 深水埗区| 潢川县| 黄陵县| 道真| 涿鹿县| 齐齐哈尔市| 清流县| 惠安县| 清水河县| 精河县| 拉孜县| 论坛| 栖霞市| 象山县| 新晃| 池州市|