python讀取yaml配置文件

什么是yaml

1、yaml [?j?m?l]: Yet Another Markup Language :另一種標(biāo)記語(yǔ)言。yaml 是專門(mén)用來(lái)寫(xiě)配置文件的語(yǔ)言,非常簡(jiǎn)潔和強(qiáng)大,
2、支持多種語(yǔ)言:python、js、golang、java、c、c++
3、yaml語(yǔ)法

  • 大小寫(xiě)敏感
  • 使用縮進(jìn)表示層級(jí)關(guān)系
  • 縮進(jìn)時(shí)不允許使用Tab鍵,只允許使用空格。
  • 縮進(jìn)的空格數(shù)目不重要,只要相同層級(jí)的元素左側(cè)對(duì)齊即可
  • #號(hào)表示注釋

4、yaml支持的數(shù)據(jù)結(jié)構(gòu)有三種:

  • 對(duì)象:鍵值對(duì)的集合,又稱為映射(mapping)/ 哈希(hashes) / 字典(dictionary)

  • 數(shù)組:一組按次序排列的值,又稱為序列(sequence) / 列表(list)

  • 純量(scalars):?jiǎn)蝹€(gè)的、不可再分的值。字符串、布爾值、整數(shù)、浮點(diǎn)數(shù)、Null、時(shí)間、日期

在實(shí)際工作中,我們經(jīng)常使用yaml文件來(lái)存儲(chǔ)數(shù)據(jù)或者存儲(chǔ)一些必要的配置,那么在python中,我們?nèi)绾螌⒋鎯?chǔ)在yaml文件中的數(shù)據(jù)轉(zhuǎn)化為python可以識(shí)別的數(shù)據(jù)類(lèi)型呢?

安裝yaml

使用pip安裝pyyaml模塊

pip install pyyaml

python讀取yaml案例

用python讀取yaml文件案例如下,先用open方法讀取文件數(shù)據(jù),再通過(guò)load方法轉(zhuǎn)成字典,這個(gè)load跟json里面的load是相似的。

# coding:utf-8
import yaml
import os

# 獲取當(dāng)前腳本所在文件夾路徑
curPath = os.path.dirname(os.path.realpath(__file__))
# 獲取yaml文件路徑
yamlPath = os.path.join(curPath, "configyaml.yaml")

# open方法打開(kāi)直接讀出來(lái)
with open(yamlPath, 'r', encoding='utf-8') as f:
    config = f.read()
print(type(config))  # 讀出來(lái)是字符串
print(config)

d = yaml.load(config,Loader=yaml.FullLoader)  # 用load方法轉(zhuǎn)字典
print(d)
print(d.get('time1'))
print(type(d))

yaml寫(xiě)法及與python對(duì)應(yīng)關(guān)系

1、鍵值對(duì)(dict)

字典寫(xiě)法

# yaml
user: admin
psw: 123456

嵌套字典寫(xiě)法

# yaml
user1:
    user: admin
    psw: 123456

2、序列(list)

yaml里面寫(xiě)一個(gè)數(shù)組,前面加一個(gè)‘-’符號(hào),如下

#yaml
- admin1: 111111
- admin2: 222222
- admin3: 333333

對(duì)應(yīng)python的列表嵌套字典

[{'admin1': 111111},
{'admin2': 222222}, 
{'admin3': 333333}]

3、純量(str)

1.int和float類(lèi)型的數(shù)字

n1: 12.30 

2.布爾值用true和false表示

n2: true 
n3: false

3.None用~表示

n4: ~

4.時(shí)間采用 ISO8601 格式。

time1: 2001-12-14t21:59:43.10-05:00 

對(duì)應(yīng)python

{'time1': datetime.datetime(2001, 12, 15, 2, 59, 43, 100000)}

5.日期采用復(fù)合 iso8601 格式的年、月、日表示。

date1: 2017-07-31

對(duì)應(yīng)python

{'date1': datetime.date(2017, 7, 31)}

6.使用兩個(gè)感嘆號(hào),強(qiáng)制轉(zhuǎn)換數(shù)據(jù)類(lèi)型。

int轉(zhuǎn)str

n6: !!str 123  

對(duì)應(yīng)python

{'n6': '123'}

bool值轉(zhuǎn)str

n7: !!str true

對(duì)應(yīng)python

{'n7': 'true'}

7.在yaml文件寫(xiě)入以下內(nèi)容:

n1: 12.30
n2: true
n3: false
n4: ~
time1: 2018-04-18t21:59:43.10+08:00
date1: 2018-04-18
n6: !!str 123
n7: !!str true

python讀取結(jié)果:

{'n1': 12.3, 
'n2': True, 
'n3': False, 
'n4': None, 
'time1': datetime.datetime(2018, 4, 18, 21, 59, 43, 100000, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800)))
'date1': datetime.date(2018, 4, 18), 
'n6': '123', 
'n7': 'true'}

4、混合使用

1.list嵌套dict,在yaml里面寫(xiě)入如下內(nèi)容:

- user: admin1
  psw: '123456'

- user: admin2
  psw: '111111'

- user: admin3
  psw: '222222'

用python讀取出來(lái)的結(jié)果:

[{'user': 'admin1', 'psw': '123456'},{'user': 'admin2', 'psw': '111111'},{'user': 'admin3', 'psw': '222222'}]

2.dict嵌套list,在yaml里面寫(xiě)入如下內(nèi)容:

nub1:
    - admin1
    - '123456'

nb2:
    - admin2
    - '111111'

nb3:
    - admin3
    - '222222'

用python讀取出來(lái)的結(jié)果:

{'nub1': ['admin1', '123456'], 'nb2': ['admin2', '111111'], 'nb3': ['admin3', '222222']}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容