Yaml文件,超詳細講解
- 2020 年 3 月 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: 'testn1' str2: "testn2"
轉換成Python數據結構,如下:
{'str1': 'test\n1', 'str2': 'testn2'}
可以拆分多行,每一行就是一個空格,但是要注意他們的層級必須一致
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 }