配置文件之yaml文件


前言

配置文件除了常見的.ini、.conf之外,yaml也是一種配置文件類型,相比與.ini、.conf,yaml配置文件更簡潔、操作更簡單、同時也可以存放不同數據類型,讀取時會原樣讀取出文件中的數據類型。yaml文件依賴與python的第三方庫PyYaml模塊。

PyYaml安裝

在cmd中輸入命令pip install pyyaml

或你直接在pychar-setting中安裝,如下圖

 

 

 yaml存數據方式

1.存放字典數據

config.yaml

 

 

read.yaml

 

 

 輸出

 

 

 從輸出結果及yaml讀取文件內容可以看到,輸出的內容是一個字典類型,yaml文件中存儲的字符串輸出仍是字符串類型,int型仍是int型等,存儲None類型可以使用null,~符號以及None,這也是區別ini配置文件的地方,且文件內容使用[key:value]的形式定義,當然key和value也可以使用雙引號修飾;

2.yaml存儲多組數據

 

 

 read.yaml

 

 

 輸出

 

 

 如果需要讀取多組數據時,需要使用load_all方法,返回的是一個生成器,需要使用for循環來分別讀取出數據。在文件寫入時,多組數據需要使用三個-分隔符隔開。

3.yaml存儲列表並讀取

 

 

 read.yaml

 

 

 輸出

 

 

 yaml存儲數據為列表時,在寫入文件時需要在前面加上一個-分隔符。

4.yaml存儲元組類型

 

 

 read.yaml

 

 

 輸出

 

 

 yaml寫入文件時可以使用!!強制轉化數據類型

conf.yaml

key:
- word:
username: xrr
password: 123456
key1:
first: python
second: pyyaml

read.yaml

import yaml


with open("conf.yaml", "r", encoding="utf8") as f:
context = yaml.load(f, Loader=yaml.FullLoader)
print("讀取內容\n", context, type(context))

輸出

讀取內容
{'key': [{'word': {'username': 'xrr', 'password': 123456}}], 'key1': {'first': 'python', 'second': 'pyyaml'}} <class 'dict'>

小結:

實際工作中用於存儲字典,列表,或者相互嵌套的數據較常見,那么在存儲和讀取時需要掌握以下幾點

1.存儲字典時,以[key:value]的形式定義

2.存儲列表時,需要使用[- 元素]表示列表

3.存儲多組數據時,需要每組數據之間使用3個橫杠-分割分割

4.數據嵌套時,需要注意縮進,和編寫python代碼的縮進規則相同,唯一不同是,yaml中的縮進只要統一即可不需要指定縮進多少

5.讀取一組數據時,直接使用load(stream, loader)方法, 讀取多組數據時需要使用load_all(stream, loader)方法,此方法返回的是一個生成器,需要使用for循環讀取每一組數據,還需要注意兩個方法中的最好像我代碼中一樣傳遞loader參數為FullLoader,否則會報Warnning

寫yaml文件

寫入yaml文件比較簡單直接使用dump和dump_all方法即可

dump寫入一組數據

import yaml

response_data = {
"code": "200",
"data": [
{
"id": 1517,
"regname": "jack",
"pwd": "123456",
"mobile_phone": "13168717209",
"type": "1",
},
{
"id": 1518,
"regname": "jackl",
"pwd": "Q112345",
"mobilephone": "13168717209",
"type": "1",

}
],
"msg": "獲取用戶列表成功"
}

try:
with open("./config.yaml", "w", encoding="utf-8") as f:
yaml.dump(data=response_data, stream=f, allow_unicode=True)
except Exception as e:
print("寫入yaml文件內容失敗")
raise e
else:
print("寫入yaml文件內容成功")
寫入結果:
code: '200'
data:
- id: 1517
mobile_phone: '13168717209'
pwd: '123456'
regname: jack
type: '1'
- id: 1518
mobilephone: '13168717209'
pwd: Q112345
regname: jackl
type: '1'
msg: 獲取用戶列表成功

dump_all寫入多組數據
import yaml

response_data = {
"code": "200",
"data": [
{
"id": 1517,
"regname": "jack",
"pwd": "123456",
"mobile_phone": "13168717209",
"type": "1",
},
{
"id": 1518,
"regname": "jackl",
"pwd": "Q112345",
"mobilephone": "13168717209",
"type": "1",

}
],
"msg": "獲取用戶列表成功"
}
data1 = {
"code": "200",
"data": [
{
"id": 1519,
"regname": "jack2",
"pwd": "123456",
"mobile_phone": "13168717202",
"type": "1",
}]
}
try:
with open("./config.yaml", "w", encoding="utf-8") as f:
yaml.dump_all(documents = [response_data,data1],stream=f,allow_unicode=True)
except Exception as e:
print("寫入yaml文件內容失敗")
raise e
else:
print("寫入yaml文件內容成功")
寫入結果:
code: '200'
data:
- id: 1517
mobile_phone: '13168717209'
pwd: '123456'
regname: jack
type: '1'
- id: 1518
mobilephone: '13168717209'
pwd: Q112345
regname: jackl
type: '1'
msg: 獲取用戶列表成功
---
code: '200'
data:
- id: 1519
mobile_phone: '13168717202'
pwd: '123456'
regname: jack2
type: '1'
小結:

1.寫入一組數據直接使用dump方法或者dump_all方法也可

2.寫入多組數據只能使用dump_all方法

3.寫入數據時最重要的一點需要注意:如果你的數據包含中文,dump和dump_all 方法需要添加allow_unicode=True參數,否則中文寫入后不會正常顯示




免責聲明!

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



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