1. 程式人生 > >Yaml檔案,超詳細講解

Yaml檔案,超詳細講解

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