簡(jiǎn)單介紹Python的第三方庫yaml_第1頁
簡(jiǎn)單介紹Python的第三方庫yaml_第2頁
簡(jiǎn)單介紹Python的第三方庫yaml_第3頁
簡(jiǎn)單介紹Python的第三方庫yaml_第4頁
簡(jiǎn)單介紹Python的第三方庫yaml_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論