Python學(xué)習(xí)之yaml文件的讀取詳解
yaml 文件的應(yīng)用場(chǎng)景與格式介紹
yaml 文件的應(yīng)用場(chǎng)景
yaml其實(shí)也類似于 json、txt ,它們都屬于一種文本格式。在我們的實(shí)際工作中, yaml 文件經(jīng)常作為服務(wù)期配置文件來(lái)使用。 比如一些定義好的內(nèi)容,并且不會(huì)修改的信息,我們就可以通過(guò)定義 yaml 文件,然后通過(guò)讀取這樣的文件,將數(shù)據(jù)導(dǎo)入到我們的服務(wù)中進(jìn)行使用。
由于 yaml 文件一般作為配置文件使用,所以較少會(huì)修改。故而該章節(jié),我們僅學(xué)習(xí) yaml 文件的讀取。
yaml 文件的格式
==首先大家需要知道,yaml 不是標(biāo)記語(yǔ)言,跟 json 類似,yaml 的用途也是對(duì)數(shù)據(jù)進(jìn)行序列化。(內(nèi)容格式為鍵值對(duì),但是與 dict 數(shù)據(jù)類型的鍵值對(duì)顯示的樣式有所區(qū)別)。內(nèi)容格式人性化,較易讀.==yaml 文件格式后綴為 .yaml。
注意:YAML 有一個(gè)小的怪癖。所有的 YAML 文件開(kāi)始行都應(yīng)該是 —。這是 YAML 格式的一部分, 表明一個(gè)文件的開(kāi)始。>
YAML語(yǔ)法格式如下:
1、大小寫(xiě)敏感
2、使用縮進(jìn)表示層級(jí)關(guān)系
3、縮進(jìn)的空格數(shù)目不重要,只要相同層級(jí)的元素左側(cè)對(duì)齊即可,通常開(kāi)頭縮進(jìn)兩個(gè)空格
4、不支持Tab鍵制表符縮進(jìn),只使用空格縮進(jìn)
5、字符后縮進(jìn)一個(gè)空格,如冒號(hào),逗號(hào),短橫桿(-)等
6、"—“表示YAML格式,一個(gè)文件的開(kāi)始,用于分隔文件間
7、”#”表示注釋 (yaml文件只有行注釋)
YAML 支持的數(shù)據(jù)結(jié)構(gòu)有三種。
對(duì)象:鍵值對(duì)的集合,又稱為映射(mapping)/ 哈希(hashes) / 字典(dictionary)
數(shù)組:一組按次序排列的值,又稱為序列(sequence) / 列表(list)
純量(scalars):?jiǎn)蝹€(gè)的、不可再分的值
下面對(duì)這三種數(shù)據(jù)結(jié)構(gòu)做詳細(xì)介紹:
yaml 中的值有以下基本類型:
- 字符串
- 整形
- 浮點(diǎn)型
- 布爾型
- null
- 時(shí)間
- 日期
yaml 文件內(nèi)容格式示例如下:
# 注釋 # 1-1、字典 鍵: 值 username: xiaoming # 冒號(hào)后面是空格 password: 123456 info: 配置 # 中文---不建議使用,有可能會(huì)亂碼 # 1-2、字典嵌套 NAME_PSW: name:xiaoming password:123456 # 2-1、列表格式 -10 -20 -30 # 2-2、列表嵌套 -10 -20 - -100 -200 # 3-1、列表中套字典 -10 -20 - name: tom password: 123456 # 4-1、字典套列表 name: TOM info: -10 -20 -30 # 5-1、引號(hào) 如果是有英文字母或者中文的,不加引號(hào)也是字符串 info: "HELLO word" # 引號(hào)可以不加 # 5-2、什么加引號(hào):如果有特俗字符\n 不加引號(hào)就原字符樣式輸出 如果顯示特殊字符效果:就加雙引號(hào) info: "HELLO\nwoord" # 6-1、引用 一個(gè)數(shù)據(jù)可以使用很多地方,使用變量 # & 變量名 定義變量 # *變量名 引用變量 name: &a tom name1: *a # 7-1、能不能多個(gè)YAML 寫(xiě)在一起,有字典也有列表 ,加分隔符 --- -10 -20 -30 --- name: sq # 8-1、yamL文件可以有YAML DATA: conf.yaml
第三方包 - pyyaml
pyyaml 的安裝:pip install PyYAML [若安裝失敗,參考 - 包與模塊 章節(jié)的 如何安裝第三方包]
pyyaml 的導(dǎo)入:import pyyaml

讀取 yaml 文件的方法
用法如下:
file = open(yaml_file, 'r') daya = yaml.load(file.read()) file.close
返回字典類型(示例):
{
'name': '托尼·史塔克'
'age': '52'
'sex': 'man'
}
yaml文件讀取演示案例
創(chuàng)建一個(gè) test.yaml 文件,內(nèi)容如下:
name: 托尼·史塔克 # 字符串引號(hào)可以不加 【這里的縮進(jìn)使用的是tab鍵,所以如果直接復(fù)制粘貼,在運(yùn)行下方腳本時(shí)會(huì)報(bào)錯(cuò),記得改成空格】 invention: - Iron Man Armor - Arc reactor - Ultron teammate: - Steven Rogers - Thor Odinson - Natasha Romanoff - Bruce Banner - Clint Barton apprentice: 彼得·帕克 wife: 佩珀·波茲 father: 霍華德·史塔克
創(chuàng)建一個(gè) test_yaml.py 文件,讀取 test.yaml 文件:
# coding:utf-8
import yaml
def read(path):
with open(path, 'r') as file:
data = file.read()
result = yaml.load(data)
# result = yaml.load(data, Loader=yaml.FullLoader)
return result
if __name__ == '__main__':
result = read('test.yaml')
print(result)
這里執(zhí)行的時(shí)候出現(xiàn)了一個(gè)報(bào)錯(cuò) :TypeError: load() missing 1 required positional argument: 'Loader'。 如下圖:

這是因?yàn)樵?YAML 5.1版本后棄用了yaml.load(file)這個(gè)用法,因?yàn)橛X(jué)得很不安全,5.1版本之后就修改了需要指定Loader,通過(guò)默認(rèn)加載器(FullLoader)禁止執(zhí)行任意函數(shù),該load函數(shù)也變得更加安全。所以我們需要將 result = yaml.load(data) 改為 result = yaml.load(data, Loader=yaml.FullLoader) 。
解決該 TypeError 不單單 只有 yaml.load(data, Loader=yaml.FullLoader) 這一個(gè)方法。
以下三選一即可解決該 TypeError
yaml.safe_load(file.read()) yaml.load(file.read(), Loader=yaml.FullLoader) yaml.load(file.read(), Loader=yaml.CLoader)
運(yùn)行結(jié)果如下:

到此這篇關(guān)于Python學(xué)習(xí)之yaml文件的讀取詳解的文章就介紹到這了,更多相關(guān)Python yaml讀取內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python使用pip安裝報(bào)錯(cuò):is not a supported wheel on this platform的解決
這篇文章主要介紹了Python使用pip安裝報(bào)錯(cuò):is not a supported wheel on this platform的解決方法,結(jié)合實(shí)例形式分析了在安裝版本正確的情況下pip安裝報(bào)錯(cuò)的原因與相應(yīng)的解決方法,需要的朋友可以參考下2018-01-01
利用python3篩選excel中特定的行(行值滿足某個(gè)條件/行值屬于某個(gè)集合)
這篇文章主要給大家介紹了關(guān)于利用python3篩選excel中特定的行(行值滿足某個(gè)條件/行值屬于某個(gè)集合)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Python在centos7.6上安裝python3.9的詳細(xì)教程(默認(rèn)python版本為2.7.5)
這篇文章主要介紹了Python在centos7.6上安裝python3.9(默認(rèn)python版本為2.7.5)的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-10-10
python tkinter窗口最大化的實(shí)現(xiàn)
這篇文章主要介紹了python tkinter窗口最大化的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
python裝飾器-限制函數(shù)調(diào)用次數(shù)的方法(10s調(diào)用一次)
下面小編就為大家分享一篇python裝飾器-限制函數(shù)調(diào)用次數(shù)的方法(10s調(diào)用一次),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
Python爬蟲(chóng)實(shí)現(xiàn)熱門電影信息采集
這篇文章主要介紹了利用Python爬蟲(chóng)采集熱門電影信息,文中示例代碼很詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴快來(lái)跟隨小編一起學(xué)習(xí)吧2021-12-12
python list的index()和find()的實(shí)現(xiàn)
這篇文章主要介紹了python list的index()和find()的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
python解析HTML并提取span標(biāo)簽中的文本
在網(wǎng)頁(yè)開(kāi)發(fā)和數(shù)據(jù)抓取過(guò)程中,我們經(jīng)常需要從HTML頁(yè)面中提取信息,尤其是span元素中的文本,span標(biāo)簽是一個(gè)行內(nèi)元素,通常用于包裝一小段文本或其他元素,在Python中,我們可以通過(guò)使用BeautifulSoup或lxml等庫(kù)來(lái)解析HTML并提取span標(biāo)簽中的文本2024-12-12

