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
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM