Python YAML文件的讀寫操作詳解
YAML是一種數(shù)據(jù)序列化格式,方便人類閱讀,且容易和腳本語言交互。常用于配置文件,也用于數(shù)據(jù)存儲或傳輸。
YAML格式
YAML三種基本數(shù)據(jù)類型:
1.標(biāo)量:如字符串、整數(shù)和浮點(diǎn)數(shù)、日期
- 布爾值:“true”、“True”、“TRUE”、“yes”、“Yes"和"YES”,“false”、“False”、“FALSE”、“no”、“No"和"NO”
- 空:null、Null、
~或不指定值;
2.數(shù)組:使用前導(dǎo)符號-表示,且符號與值間要有空格;
3.對象:鍵值對集合;用冒號+空格: 分割;
YAML文件
文件基本規(guī)則:
區(qū)分大小寫;
使用縮進(jìn)表示層級關(guān)系:
- 縮進(jìn)要用空格(非Tab);
- 相同層級元素要左對齊;
字符串不需要使用引號括起,但有特殊字符串(如空格、冒號等)時必須使用引號;
使用#注釋;
一個文件中可包含多份YAML文檔:
用---(即三個中劃線)表示一份文檔的開始;
[可選]用...(即三個小數(shù)點(diǎn))表示一份文檔的結(jié)束;
---
# 這是第一份文檔
one: 1
# 其他內(nèi)容...
...---
# 這是第二份文檔
two: 2
# 其他內(nèi)容...
YAML操作
Python中有兩個YAML模塊:PyYAML和ruamel.yaml(pip3 install pyyaml,pip3 install ruamel.yaml)。
讀取
通過load函數(shù)可方便加載文檔內(nèi)容,返回的內(nèi)容可能是字典、列表或空:
import yaml
def readYaml(file): # -> Union[dict, list, None]:
with open(file, 'r', encoding='utf-8') as f:
return yaml.load(f, yaml.Loader)若文件中有多個文檔,需要使用load_all來加載;此時返回的是一個生成器,需要一次獲取每個文檔:
def readAllDoc(file) -> list:
with open(file, 'r', encoding='utf-8') as f:
docs = yaml.load_all(f, yaml.Loader)
# return [d for d in docs]
return list(docs)存儲
yaml.dump()方法不會將列表或字典數(shù)據(jù)進(jìn)行轉(zhuǎn)化yaml標(biāo)準(zhǔn)模式。需要通過ruamel.yaml來生成標(biāo)準(zhǔn)的yaml文檔。
import ruamel.yaml
def createYaml(file, data: dict):
with open(file, 'w', encoding='utf-8') as f:
writer = ruamel.yaml.YAML()
writer.indent(mapping=2, sequence=4, offset=2)
writer.dump(data, f)通過dump_all可把數(shù)組中的每個元素序列化為一個文檔:
def createAllDoc(file, data: list):
with open(file, 'w', encoding='utf-8') as f:
writer = ruamel.yaml.YAML()
writer.indent(mapping=2, sequence=4, offset=2)
writer.dump_all(data, f)把[{'name': 'Mike', 'age': 12}, {'name': 'luce', 'age': 15}]序列化。
dump會生成如下包含數(shù)組元素的yaml文件:
- name: Mike
age: 12
- name: luce
age: 15
dump_all會生成如下yaml文件(包含兩個文檔):
name: Mike age: 12 --- name: luce age: 15
示例
yaml讀取后為列表或字典。
轉(zhuǎn)字典
讀取的內(nèi)容為一個字典:
name: mike age: 25 score: 80.5
返回的值為:
{
"name": "mike",
"age": 25,
"score": 80.5
}
獲取里面值,先判斷是否存在,再讀?。?/p>
if 'name' in data: print(data['name'])
轉(zhuǎn)列表
讀取內(nèi)容為一個列表:
- name: mike age: 24 - name: tom age: 30
返回的值為:
[
{
"name": "mike",
"age": 24
},
{
"name": "tom",
"age": 30
}
]
到此這篇關(guān)于Python YAML文件的讀寫操作詳解的文章就介紹到這了,更多相關(guān)Python YAML文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pycharm創(chuàng)建django項(xiàng)目出現(xiàn)路徑錯誤問題
在PyCharm中創(chuàng)建Django項(xiàng)目時,若使用之前項(xiàng)目的環(huán)境編譯器,且已修改其根目錄,則新建項(xiàng)目路徑可能出錯。解決辦法是在設(shè)置中選擇Project,通過齒輪圖標(biāo)進(jìn)入Show?All,選擇編譯器路徑,點(diǎn)擊筆形圖修改Development?configuration的Root?path為/,以確保新項(xiàng)目能正確創(chuàng)建2024-09-09
Python圖像銳化與邊緣檢測之Scharr,Canny,LOG算子詳解
圖像銳化和邊緣檢測主要包括一階微分銳化和二階微分銳化,本文主要講解常見的圖像銳化和邊緣檢測方法,即Scharr算子、Canny算子和LOG算子,需要的可以參考一下2022-12-12
matplotlib畫混淆矩陣與正確率曲線的實(shí)例代碼
混淆矩陣也稱誤差矩陣,是表示精度評價的一種標(biāo)準(zhǔn)格式,下面這篇文章主要給大家介紹了關(guān)于matplotlib畫混淆矩陣與正確率曲線的相關(guān)資料,需要的朋友可以參考下2021-06-06
Python PIL庫Image函數(shù)的基本圖像處理操作實(shí)例
這篇文章主要為大家介紹了Python PIL庫Image函數(shù)的基本圖像處理操作實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
Python face_recognition實(shí)現(xiàn)AI識別圖片中的人物
最近碰到了照片識別的場景,正好使用了face_recognition項(xiàng)目,給大家分享分享。face_recognition項(xiàng)目能做的很多,人臉檢測功能也是有的,是一個比較成熟的項(xiàng)目。感興趣的可以了解一下2022-01-01

