<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
yaml其實也類似於 json、txt ,它們都屬於一種文字格式。在我們的實際工作中, yaml 檔案經常作為服務期組態檔來使用。 比如一些定義好的內容,並且不會修改的資訊,我們就可以通過定義 yaml 檔案,然後通過讀取這樣的檔案,將資料匯入到我們的服務中進行使用。
由於 yaml 檔案一般作為組態檔使用,所以較少會修改。故而該章節,我們僅學習 yaml 檔案的讀取。
==首先大家需要知道,yaml 不是標示語言,跟 json 類似,yaml 的用途也是對資料進行序列化。(內容格式為鍵值對,但是與 dict 資料型別的鍵值對顯示的樣式有所區別)。內容格式人性化,較易讀.==yaml 檔案格式字尾為 .yaml。
注意:YAML 有一個小的怪癖。所有的 YAML 檔案開始行都應該是 —。這是 YAML 格式的一部分, 表明一個檔案的開始。>
YAML語法格式如下:
1、大小寫敏感
2、使用縮排表示層級關係
3、縮排的空格數目不重要,只要相同層級的元素左側對齊即可,通常開頭縮排兩個空格
4、不支援Tab鍵製表符縮排,只使用空格縮排
5、字元后縮排一個空格,如冒號,逗號,短橫杆(-)等
6、"—“表示YAML格式,一個檔案的開始,用於分隔檔案間
7、”#”表示註釋 (yaml檔案只有行註釋)
YAML 支援的資料結構有三種。
物件:鍵值對的集合,又稱為對映(mapping)/ 雜湊(hashes) / 字典(dictionary)
陣列:一組按次序排列的值,又稱為序列(sequence) / 列表(list)
純量(scalars):單個的、不可再分的值
下面對這三種資料結構做詳細介紹:
yaml 中的值有以下基本型別:
yaml 檔案內容格式範例如下:
# 註釋 # 1-1、字典 鍵: 值 username: xiaoming # 冒號後面是空格 password: 123456 info: 設定 # 中文---不建議使用,有可能會亂碼 # 1-2、字典巢狀 NAME_PSW: name:xiaoming password:123456 # 2-1、列表格式 -10 -20 -30 # 2-2、列表巢狀 -10 -20 - -100 -200 # 3-1、列表中套字典 -10 -20 - name: tom password: 123456 # 4-1、字典套列表 name: TOM info: -10 -20 -30 # 5-1、引號 如果是有英文字母或者中文的,不加引號也是字串 info: "HELLO word" # 引號可以不加 # 5-2、什麼加引號:如果有特俗字元n 不加引號就原字元樣式輸出 如果顯示特殊字元效果:就加雙引號 info: "HELLOnwoord" # 6-1、參照 一個資料可以使用很多地方,使用變數 # & 變數名 定義變數 # *變數名 參照變數 name: &a tom name1: *a # 7-1、能不能多個YAML 寫在一起,有字典也有列表 ,加分隔符 --- -10 -20 -30 --- name: sq # 8-1、yamL檔案可以有YAML DATA: conf.yaml
pyyaml 的安裝:pip install PyYAML [若安裝失敗,參考 - 包與模組 章節的 如何安裝第三方包]
pyyaml 的匯入:import pyyaml
用法如下:
file = open(yaml_file, 'r') daya = yaml.load(file.read()) file.close
返回字典型別(範例):
{ 'name': '託尼·史塔克' 'age': '52' 'sex': 'man' }
建立一個 test.yaml 檔案,內容如下:
name: 託尼·史塔克 # 字串引號可以不加 【這裡的縮排使用的是tab鍵,所以如果直接複製貼上,在執行下方指令碼時會報錯,記得改成空格】 invention: - Iron Man Armor - Arc reactor - Ultron teammate: - Steven Rogers - Thor Odinson - Natasha Romanoff - Bruce Banner - Clint Barton apprentice: 彼得·帕克 wife: 佩珀·波茲 father: 霍華德·史塔克
建立一個 test_yaml.py 檔案,讀取 test.yaml 檔案:
# coding:utf-8 import yaml def read(path): with open(path, 'r') as file: data = file.read() result = yaml.load(data) # result = yaml.load(data, Loader=yaml.FullLoader) return result if __name__ == '__main__': result = read('test.yaml') print(result)
這裡執行的時候出現了一個報錯 :TypeError: load() missing 1 required positional argument: 'Loader'。 如下圖:
這是因為在 YAML 5.1版本後棄用了yaml.load(file)這個用法,因為覺得很不安全,5.1版本之後就修改了需要指定Loader,通過預設載入器(FullLoader)禁止執行任意函數,該load函數也變得更加安全。所以我們需要將 result = yaml.load(data) 改為 result = yaml.load(data, Loader=yaml.FullLoader) 。
解決該 TypeError 不單單 只有 yaml.load(data, Loader=yaml.FullLoader) 這一個方法。
以下三選一即可解決該 TypeError
yaml.safe_load(file.read()) yaml.load(file.read(), Loader=yaml.FullLoader) yaml.load(file.read(), Loader=yaml.CLoader)
執行結果如下:
到此這篇關於Python學習之yaml檔案的讀取詳解的文章就介紹到這了,更多相關Python yaml讀取內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45