版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第簡(jiǎn)單介紹Python的第三方庫yaml目錄一、yaml基本介紹二、適用場(chǎng)景三、基本的語法規(guī)則四、YAML支持的三種數(shù)據(jù)結(jié)構(gòu)4.1對(duì)象4.2數(shù)組4.2.1對(duì)象和數(shù)組4.3純量4.4還有一些特殊符號(hào)4.4.1—YAML可在同一個(gè)文件中,使用—表示一個(gè)文檔的開始4.4.2…和—配合使用,在一個(gè)配置文件中代表一個(gè)的結(jié)束4.4.3YAML中使用!!做類型強(qiáng)行轉(zhuǎn)換4.4.4在字符串中表示折疊換行;|保留換行。這兩個(gè)符號(hào)是YAML中字符串經(jīng)常使用的符號(hào)4.4.5引用。重復(fù)的內(nèi)容在YAML中可使用來完成錨點(diǎn)定義,用*來完成錨點(diǎn)引用4.4.6合并內(nèi)容。主要是和錨點(diǎn)配合使用,可將一個(gè)錨點(diǎn)內(nèi)容直接合并到一個(gè)對(duì)象中五、實(shí)戰(zhàn)5.1安裝yaml5.2Python使用yaml
一、yaml基本介紹
yaml是Python的第三方庫。YAMLisahumanfriendlydataserializationstandardforallprogramminglanguages(YAML是一個(gè)對(duì)所有編程語言都很友好的數(shù)據(jù)序列化標(biāo)準(zhǔn))。
但為了強(qiáng)調(diào)該語言以數(shù)據(jù)為中心,而不是以標(biāo)記語言為重點(diǎn),而用返璞詞重新命名。它是一種直觀的能夠被電腦識(shí)別的數(shù)據(jù)序列化格式,是一種可讀性高且容易被人類閱讀、容易和腳本語言(不僅僅是Python)交互,用于表達(dá)資料序列的編程語言。YAML語言的本質(zhì)是一種通用的數(shù)據(jù)串行化格式。
二、適用場(chǎng)景
在腳步語言中使用,實(shí)現(xiàn)簡(jiǎn)單,解析成本低;
序列化;
編程時(shí)寫配置文件,比xml快,比ini文檔功能更強(qiáng)。
YAML是專門用于寫配置文件的語言,非常簡(jiǎn)潔和強(qiáng)大,遠(yuǎn)比JSON格式方便。
三、基本的語法規(guī)則
大小寫敏感;
使用縮進(jìn)表示層級(jí)關(guān)系;
縮進(jìn)時(shí)不允許使用Tab鍵,只允許使用空格;
縮進(jìn)的空格數(shù)目不重要,只要相同層級(jí)的元素左側(cè)對(duì)齊即可(一般2個(gè)或4個(gè)空格);
#表示注釋當(dāng)前行。
四、YAML支持的三種數(shù)據(jù)結(jié)構(gòu)
對(duì)象:即鍵值對(duì)的集合,又稱為映射(mapping)/哈希(hashes)/字典(dictionary);
數(shù)組:一組按次序排列的值,又稱為序列(sequence)/列表(list);
純量:?jiǎn)蝹€(gè)的、不可再分的值。
4.1對(duì)象
使用冒號(hào)代表,格式為key:value。冒號(hào)后須加一個(gè)空格。
使用縮進(jìn)表示層級(jí)關(guān)系,如下:
child_key1:value1
child-key2:value2
YAML還支持流式(flow)語法表示對(duì)象,上例可寫成:
key:{child_key1:value1,child_key2:value2}
這在Python中是字典嵌套字典,是這么寫的:
"key":{
"child_key1":"value1",
"child_key2":"value2"
}
較為復(fù)雜的對(duì)象格式,可使用一個(gè)問號(hào)加一個(gè)空格代表一個(gè)復(fù)雜的key,配合一個(gè)冒號(hào)加一個(gè)空格代表一個(gè)value:
-complex_key1
-complex_key2
-complex_value1
-complex_value2
上述表示:對(duì)象的屬性是一個(gè)數(shù)組[complex_key1,complex_key2],其對(duì)應(yīng)的值也是一個(gè)數(shù)組[complex_value1,complex_value2]。
4.2數(shù)組
使用一個(gè)短橫線加一個(gè)空格代表一個(gè)數(shù)組項(xiàng):
hobby:
-python
-test
也可以這樣說:
-python
-test
可簡(jiǎn)單理解為:[[python,test]]
再看一個(gè)相對(duì)復(fù)雜的例子:
role:
id:1
name:developer
auth:dev
id:2
name:tester
auth:test
可理解為:role屬性是一個(gè)數(shù)組,每個(gè)數(shù)組元素又是由id、name、auth3個(gè)屬性構(gòu)成。
用流式(flow)的方式表示如下:
role:[{id:1,name:developer,auth:dev},{id:2,name:tester,auth:test}]
4.2.1對(duì)象和數(shù)組
可結(jié)合使用,形成復(fù)合結(jié)構(gòu)
languages:
-Ruby
-Perl
-Python
websites:
YAML:
Ruby:
Python:
Perl:
4.3純量
純量是最基本的、不可再分的值。YAML提供了多種常量結(jié)構(gòu):整數(shù)、浮點(diǎn)數(shù)、字符串、NULL、日期、布爾值、時(shí)間。
int:
-123
-0b1010_0111_0100_1010_1110#二進(jìn)制表示
float:
-3.14159
-6.6e+5#可使用科學(xué)計(jì)數(shù)法
string:
-'Helloworld!'#可使用雙引號(hào)或單引號(hào)包裹特殊字符,雙引號(hào)不會(huì)對(duì)特殊字符轉(zhuǎn)義。
-newline
newline2#字符串可拆成多行,每一行會(huì)被轉(zhuǎn)化成一個(gè)空格
null:
nodeName:'node'
parent:~#使用~表示null
boolean:
-TRUE#true或True都可以
-FALSE#false或False都可以
date:
-2025-12-29#日期必須使用ISO8601格式,即yyyy-MM-dd
datetime:
-2025-12-29T18:43:21+08:00#時(shí)間使用ISO8601格式,時(shí)間和日期之間使用T連接,最后使用+代表時(shí)區(qū)
4.4還有一些特殊符號(hào)
4.4.1—YAML可在同一個(gè)文件中,使用—表示一個(gè)文檔的開始
server:
address:00
spring:
profiles:development
server:
address:
spring:
profiles:production
server:
address:20
上述例子定義兩個(gè)profile,一個(gè)development、一個(gè)production。
也可以用—來分割不同的內(nèi)容,比如記錄日志:
Time:2025-12-29T19:09:30+08:00
User:ed
Warning:
Thisisanerrormessageforthelogfile.
Time:2025-12-29T19:11:45+08:00
User:ed
Warning:
Aslightlydifferenterrormessage.
4.4.2…和—配合使用,在一個(gè)配置文件中代表一個(gè)的結(jié)束
time:19:13:09
player:Tim
action:strike
time:20:14:45
player:Lily
action:grand
...
此例相當(dāng)于在一個(gè)yaml文件中連續(xù)寫了兩個(gè)yaml配置項(xiàng)。
4.4.3YAML中使用!!做類型強(qiáng)行轉(zhuǎn)換
string:
-!!str123456
-!!strtrue
相當(dāng)于將數(shù)字和布爾類型強(qiáng)轉(zhuǎn)為字符串(允許轉(zhuǎn)換的類型還有很多)。
4.4.4在字符串中表示折疊換行;|保留換行。這兩個(gè)符號(hào)是YAML中字符串經(jīng)常使用的符號(hào)
acomplistment:
Marksetamajorleague
homerunrecordin1998.
status:|
65HomeRuns
0.278BattingAverage
accomplistment的結(jié)果為:
accomplistment=Marksetamajorleaguehomerunrecordin1998.
status的結(jié)果為:
status=65HomeRuns
0.278BattingAverage
4.4.5引用。重復(fù)的內(nèi)容在YAML中可使用來完成錨點(diǎn)定義,用*來完成錨點(diǎn)引用
-MarkMcGwire
-SSSammySosa
rbi:
-*SS
-KenGriffey
在hr中,使用SS為SammySosa設(shè)置了一個(gè)錨點(diǎn)(引用),名稱為SS;在rbi中,使用*SS完成了錨點(diǎn)使用。結(jié)果是:
{rbi=[MarkMcGwire,KenGriffey],hr=[MarkMcGwire,SammySosa]}
也可以這樣定義:
SS:SSSammySosa
-MarkMcGwire
-*SS
-*SS
-KenGriffey
還可以用錨點(diǎn)定義更復(fù)雜的內(nèi)容:
default:default
-MarkMcGwire
-SammySosa
hr:*default
hr相當(dāng)于引用default數(shù)組。不過,hr:*default須寫在同一行。
4.4.6合并內(nèi)容。主要是和錨點(diǎn)配合使用,可將一個(gè)錨點(diǎn)內(nèi)容直接合并到一個(gè)對(duì)象中
merge:
-CENTER{x:1,y:2}
-LEFT{x:0,y:2}
-BIG{r:10}
-SMALL{r:1}
sample1:
:*CENTER
r:10
sample2:
:[*CENTER,*BIG]
other:haha
sample3:
:[*CENTER,*BIG]
r:100
在merge中,定義了四個(gè)錨點(diǎn),分別在sample中使用。
sample1中,:*CENTER意思是引用{x:1,y:2},并且合并到sample1中,那么合并的結(jié)果為:sample1={r=10,y=2,x=1}
sample2中,:[*CENTER,*BIG]意思是聯(lián)合引用{x:1,y:2}和{r:10},并且合并到sample2中,那么合并的結(jié)果為:sample2={other=haha,x=1,y=2,r=10}
sample3中,引入了*CENTER,*BIG,還使用了r:100覆蓋了引入的r:10,所以sample3值為:sample3={r=100,y=2,x=1}
有了合并,我們就可以在配置中,把相同的基礎(chǔ)配置抽取出來,在不同的子配置中合并引用即可。
五、實(shí)戰(zhàn)
5.1安裝yaml
yaml包名是pyyaml,但導(dǎo)入是yaml。
5.2Python使用yaml
以【用Python讀取yaml文件(后綴可為.yml或.yaml)】為例:先用open方法讀取文件數(shù)據(jù),再通過load方法轉(zhuǎn)成字典(load方法跟json的load是相似的)。
在同一個(gè)文件夾下,編寫yaml文件,名為cfg.yml,內(nèi)容如下:
user:admin
psw:123456
編寫讀取yaml文件的.py文件,名為readyml.py,內(nèi)容如下:
importyaml
importos
curPath=os.path.dirname(os.path.realpath(__file__))#獲取當(dāng)前腳本所在文件夾路徑
ymlPath=os.path.join(curPath,"cfg.yml")#獲取yaml文件路徑
#用open方法打開直接讀取
f=open(ymlPath,'r')
cfg=f.read()
print(type(cfg))#讀取的結(jié)果是字符串
print(cfg)
d=yaml.load(cfg)#用load方法轉(zhuǎn)字典
print(d)
print(type(d))
a={'name':'Tom
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《GBT 31424-2015 煤灰黏度測(cè)定方法》專題研究報(bào)告
- 某著名企業(yè)發(fā)展戰(zhàn)略
- 《GBT 17999.4-2008 SPF雞 微生物學(xué)監(jiān)測(cè) 第4部分:SPF雞 血清平板凝集試驗(yàn)》專題研究報(bào)告
- 《GBT 21929-2008泰格閉口杯閃點(diǎn)測(cè)定法》專題研究報(bào)告
- 道路安全培訓(xùn)體會(huì)心得課件
- 2026年海南省??谑休o警考試題庫含答案
- 2026年廣西壯族自治區(qū)賀州市輔警考試試卷及答案
- 道口工人身安全培訓(xùn)課件
- 2024版多協(xié)會(huì)非心臟手術(shù)圍手術(shù)期心血管管理指南解讀課件
- 返崗復(fù)工安全培訓(xùn)要求課件
- 兒科??平ㄔO(shè)與發(fā)展規(guī)劃指南
- 煤礦基本知識(shí)培訓(xùn)課件
- GB/T 9754-2025色漆和清漆20°、60°和85°光澤的測(cè)定
- 運(yùn)輸合同轉(zhuǎn)包協(xié)議書范本
- 碳排放監(jiān)測(cè)與控制技術(shù)-洞察闡釋
- 回顧性研究設(shè)計(jì)及寫作要點(diǎn)
- 中藥儲(chǔ)存養(yǎng)護(hù)管理制度
- T/CECS 10128-2021不銹鋼二次供水水箱
- 2025屆山東省臨沂市高三二模生物試題(解析版)
- 專利侵權(quán)訴訟合同范例
- 銀行審計(jì)試題解析及答案
評(píng)論
0/150
提交評(píng)論