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  }