2018-07-22 python讀寫yaml文件

1. 什么是yam文件

YAML是一個(gè)類似 XML、JSON 的標(biāo)記性語(yǔ)言普碎。YAML 強(qiáng)調(diào)以數(shù)據(jù)為中心宽气,并不是以標(biāo)識(shí)語(yǔ)言為重點(diǎn)。因而 YAML 本身的定義比較簡(jiǎn)單绪氛,號(hào)稱“一種人性化的數(shù)據(jù)格式語(yǔ)言”枣察。

2. yaml與xml JSON

YAML 與 XML

具有 XML 同樣的優(yōu)點(diǎn)序目,但比 XML 更加簡(jiǎn)單伯襟、敏捷等
YAML 與 JSON

JSON 可以看作是 YAML 的子集,也就是說(shuō) JSON 能夠做的事情叛赚,YAML 也能夠做

YAML 能表示得比 JSON 更加簡(jiǎn)單和閱讀稽揭,例如“字符串不需要引號(hào)”。所以 YAML 容易可以寫成 JSON 的格式事镣,但并不建議這種做

YAML 能夠描述比 JSON 更加復(fù)雜的結(jié)構(gòu)璃哟,例如“關(guān)系錨點(diǎn)”可以表示數(shù)據(jù)引用(如重復(fù)數(shù)據(jù)的引用)喊递。

3 yaml 規(guī)范

1、大小寫敏感
2册舞、使用縮進(jìn)表示層級(jí)關(guān)系
3调鲸、禁止使用tab縮進(jìn),只能使用空格鍵
4即供、縮進(jìn)長(zhǎng)度沒有限制于微,只要元素對(duì)齊就表示這些元素屬于一個(gè)層級(jí)。
5驱证、使用#表示注釋
6、字符串可以不用引號(hào)標(biāo)注

常用格式舉例如下所示
字典類型

## yaml文件字典表示方法
firstName: Zhao
endName: xin
age: 27
## 也可表示為
{firstName: zhao, endName: xin, age: 27}
## 相當(dāng)于json格式如下
{"firstName": "zhao", "endName": "xin", "age": 27}

列表類型

## yaml文件表示列表
- a
- b
- c
## 也可表示為
[a, b , c]
## 對(duì)應(yīng)json根式如下
['a', 'b', 'c']

類型嵌套

  • (1) 字典嵌套字典
## yaml
Name:
first: Zhao
end: Xin
## json
{'Name':{'first': 'Zhao', 'end': 'Xin'}}
  • (2) 字典嵌套列表
## yaml
Book:
 - Shuxue
 - Yingyu
 - Hanzi
## Json
{'Book':['Shuxue', 'Yingyu', 'Hanzi']}
  • (3) 列表嵌套列表
## yaml
- 
   - Shuxue
   - Yingyu
   - Hanzi
-
   - zhaosan
   - lisi
   - wangwu
## json
[['Shuxue', 'Yingyu', 'Hanzi'], ['zhaosan', 'lisi', 'wangwu']]
  • (4) 列表嵌套字典
## yaml
-
   First: Zhao
   End: Xin
   Age: 27
-
   First: li
   End: si
   Age: 28
## json
[{'First':'Zhao', 'End': 'Xin', 'Age': 27},{'First':'li', 'End': 'si', 'Age': 28}]]

4 安裝python中yaml模塊

 pip install pyyaml

安裝完成后如下圖所示:


安裝成功標(biāo)志

5 讀寫yaml文件

yaml文件內(nèi)如下所示:

## test.yaml
people_info:
  -
    name :
      First_name : zhao
      End_name : Xin
    Age : 28
  -
    name :
      First_name : sun
      End_name : yue
    Age : 27
  -
    name :
      First_name : peng
      End_name : xiaobing
    Age : 29
  -
    name :
      First_name : liu
      End_name : yuanchang
    Age : 25

代碼如下所示

#!/usr/bin/python
# -*- coding: UTF-8 -*-
## test.py
import yaml
import os

## 讀取yaml文件
def readyaml(file):
    if os.path.isfile(file):
        fr = open(file, 'r')
        yaml_info = yaml.load(fr)
        fr.close()
        return yaml_info
    return None
##  向yaml文件中寫入配置
def writeyaml(file, data):
    fr = open(file, 'w')
    yaml.dump(data, fr)
    fr.close()
##顯示yaml文件
def display_info(data_list):
    for tmp in data_list:
        print tmp
def main():
    yaml_file = "test.yaml"

    yaml_info =readyaml(yaml_file)
    print 'old_yaml_info is ......'
    print "-"*150
    display_info(yaml_info['people_info'])
    print '*'*150
    test_data = {'Age': 21, 'name': {'First_name': 'tan', 'End_name': 'Xiao'}}
    yaml_info['people_info'].append(test_data)
    writeyaml(yaml_file, yaml_info)
    print "new_yaml_info is ......"
    display_info(readyaml(yaml_file)['people_info'])
if __name__ == '__main__':
    main()

打印如下所示:

(python_test) ?  20180722 python test.py
old_yaml_info is ......
------------------------------------------------------------------------------------------------------------------------------------------------------
{'Age': 28, 'name': {'First_name': 'zhao', 'End_name': 'Xin'}}
{'Age': 27, 'name': {'First_name': 'sun', 'End_name': 'yue'}}
{'Age': 29, 'name': {'First_name': 'peng', 'End_name': 'xiaobing'}}
{'Age': 25, 'name': {'First_name': 'liu', 'End_name': 'yuanchang'}}
******************************************************************************************************************************************************
new_yaml_info is ......
{'Age': 28, 'name': {'First_name': 'zhao', 'End_name': 'Xin'}}
{'Age': 27, 'name': {'First_name': 'sun', 'End_name': 'yue'}}
{'Age': 29, 'name': {'First_name': 'peng', 'End_name': 'xiaobing'}}
{'Age': 25, 'name': {'First_name': 'liu', 'End_name': 'yuanchang'}}
{'Age': 21, 'name': {'First_name': 'tan', 'End_name': 'Xiao'}}
(python_test) ?  20180722 

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市念秧,隨后出現(xiàn)的幾起案子布疼,更是在濱河造成了極大的恐慌缎除,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梢为,死亡現(xiàn)場(chǎng)離奇詭異铸董,居然都是意外死亡粟害,警方通過(guò)查閱死者的電腦和手機(jī)颤芬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門站蝠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)菱魔,“玉大人,你說(shuō)我怎么就攤上這事澜倦。” “怎么了碘勉?”我有些...
    開封第一講書人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)句各。 經(jīng)常有香客問(wèn)我晴叨,道長(zhǎng)兼蕊,這世上最難降的妖魔是什么件蚕? 我笑而不...
    開封第一講書人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任牵啦,我火速辦了婚禮哈雏,結(jié)果婚禮上衫生,老公的妹妹穿的比我還像新娘罪针。我一直安慰自己,他們只是感情好泪酱,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開白布愈腾。 她就那樣靜靜地躺著岂津,像睡著了一般。 火紅的嫁衣襯著肌膚如雪橱乱。 梳的紋絲不亂的頭發(fā)上泳叠,一...
    開封第一講書人閱讀 52,196評(píng)論 1 308
  • 那天危纫,我揣著相機(jī)與錄音,去河邊找鬼契耿。 笑死搪桂,一個(gè)胖子當(dāng)著我的面吹牛踢械,可吹牛的內(nèi)容都是我干的魄藕。 我是一名探鬼主播内列,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼背率!你這毒婦竟也來(lái)了话瞧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤退渗,失蹤者是張志新(化名)和其女友劉穎移稳,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體会油,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡个粱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了翻翩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片都许。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖嫂冻,靈堂內(nèi)的尸體忽然破棺而出睛低,到底是詐尸還是另有隱情骂铁,我是刑警寧澤,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站烁挟,受9級(jí)特大地震影響窃蹋,放射性物質(zhì)發(fā)生泄漏匈辱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一续语、第九天 我趴在偏房一處隱蔽的房頂上張望滥朱。 院中可真熱鬧,春花似錦缰犁、人聲如沸薇芝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)荐开。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間初斑,已是汗流浹背见秤。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工测摔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓整慎,卻偏偏與公主長(zhǎng)得像剂府,于是被迫代替她去往敵國(guó)和親淤袜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)饱亿,斷路器彪笼,智...
    卡卡羅2017閱讀 134,696評(píng)論 18 139
  • 〇捆交、前言 本文共108張圖,流量黨請(qǐng)慎重肉瓦! 歷時(shí)1個(gè)半月,我把自己學(xué)習(xí)Python基礎(chǔ)知識(shí)的框架詳細(xì)梳理了一遍。 ...
    Raxxie閱讀 18,966評(píng)論 17 410
  • 月初在辰山遇見了美好的粉色幽崩,一大片河津櫻陌选,像美麗的夢(mèng)境。 美夢(mèng)易逝役电,現(xiàn)在櫻花道的河津櫻已經(jīng)謝了霎挟。如果要去辰...
    夏日汽水HeidiXiao閱讀 484評(píng)論 1 3
  • 今天學(xué)到的是利用表格記錄5名以上顧客的成交窗口诚隙,按照以上表格進(jìn)行記錄待错,建議下載【wps 】軟件瓜客,進(jìn)行統(tǒng)計(jì)疯攒。讓...
    特種兵金色年華閱讀 112評(píng)論 0 0