Yaml檔案,超詳細講解
阿新 • • 發佈:2020-03-17
YAML檔案簡單介紹
- YAML 是一種可讀性非常高,與程式語言資料結構非常接近。同時具備豐富的表達能力和可擴充套件性,並且易於使用的資料標記語言。
- YAML全稱其實是"YAML Ain't a Markup Language"(YAML不是一種標記語言)的遞迴縮寫,所以它強調的是資料本身,而不是以標記為重點
為什麼要使用YAML檔案?
其實YAML檔案也是一種配置檔案,但是相較於ini,conf配置檔案來說,更加的簡潔,操作簡單,還能存放不同型別的資料;而像ini儲存的值就都是字串型別,讀取之後還要手動轉換
YAML的基本語法規則
- 大小寫敏感
- 使用縮排表示層級關係
- 縮排時不允許使用Tab鍵,只允許使用空格。(可以將你的ide的tab按鍵輸出替換成4個空格)
- 縮排的空格數目不重要,只要相同層級的元素左側對齊即可
- #表示註釋
YAML支援的資料結構
- 物件:鍵值對的集合,又稱為對映(mapping)/ 雜湊(hashes) / 字典(dictionary)
- 陣列:一組按次序排列的值,又稱為序列(sequence) / 列表(list)
- 純量(scalars):單個的、不可再分的值
YAML,物件資料型別
物件的一組鍵值對,使用冒號結構表示。
animal: dogs
轉換成Python資料結構,如下:
{'animal': 'dogs'}
將所有鍵值對賦值。
hash: { name: Steve, foo: bar }
轉換成Python資料結構,如下:
{'hash': {'name': 'Steve', 'foo': 'bar'}}
將列表賦值
lists : [1,2,3]
轉換成Python資料結構,如下:
{'lists': [1, 2, 3]}
將元組賦值
tuples : (1,2,3)
轉換成Python資料結構,如下:
{'tuples': '(1,2,3)'}
總結
- 當賦值列表、鍵值對時,轉換成Python資料結構是可以直接當列表、字典使用的;、
- 當賦值元組時,轉換後也是字串
- 最終輸出的都是字典型別,可以通過key獲取對應的值
YAML,陣列
這裡說的陣列結構跟 [1,2,3,4] 不太一樣,如下:
cool_list: - 10 - 15 - 12 hard_list: - {key: value} - [1,2,3] - test: - 1 - 2 - 3 twice_list: - - {a: b} - {c: d} - {e: f}
轉換成Python資料結構,如下:
'cool_list': [10, 15, 12], 'hard_list': [ {'key': 'value'}, [1, 2, 3], { 'test': [1, 2, 3] } ], 'twice_list': [ [ {'a': 'b'}, {'c': 'd'}, {'e': 'f'} ] ]
總結
當你寫成下面這種資料結構時 ,也會自動轉成字典型別,如: {'key': 'value,val2'}
key: value,val2
YAML,純量
純量是最基本的、不可再分的值;類似基本資料型別
- 字串
- 布林值
- 整數
- 浮點數
- 時間
- 日期
- Null
int: 12 float: 12.3 string: pets bool: true None: null time: 2001-12-14t21:59:43.10-05:00 date: 2018-03-21
執行結果
{ 'int': 12, 'float': 12.3, 'string': 'pets', 'bool': True, 'None': None, 'time': datetime.datetime(2001, 12, 14, 21, 59, 43, 100000, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=68400))), 'date': datetime.date(2018, 3, 21) }
包含知識點
- 時間使用ISO 8601格式,時間和日期之間使用T連線,最後使用+代表時區
- 日期必須使用ISO 8601格式,即 yyyy-MM-dd
- bool型別:true,True,false,False都可以
- 可以用 ~ 表示 null
YAML,字串詳解
- 字串是最複雜,但是又最常見的一種資料型別。
- 字串預設不使用引號 '' "" 包裹著
基礎寫法
str: 這是一行字串
轉換成Python資料結構,如下:
{'str': '這是一行字串'}
什麼情況下要用引號?當字串包含了空格or特殊字元等
str_s: "字串包含 空格&特殊字元!@#$%^&*()"
轉換成Python資料結構,如下:
{'str_s': '字串包含 空格&特殊字元!@#$%^&*()'}
要注意的是,雙引號 "" 不會對特殊字元轉義
str1: 'test\n1' str2: "test\n2"
轉換成Python資料結構,如下:
{'str1': 'test\\n1', 'str2': 'test\n2'}
可以拆分多行,每一行就是一個空格,但是要注意他們的層級必須一致
st_string: hello world
轉換成Python資料結構,如下:
{ 'st_string': 'hello world' }
YAML,型別強轉
YAML 允許使用兩個感嘆號,強制轉換資料型別
is: !!str 123 sf: !!float '12.22' si: !!int '222'
執行結果如下
{ 'is': '123', 'sf': 12.22, 'si': 222 }
&n