一? Yaml簡(jiǎn)介
1.yaml [?j?m?l]: Yet Another Markup Language :
? ? ? ? ?另一種標(biāo)記語(yǔ)言。yaml 是專門(mén)用來(lái)寫(xiě)配置文件的語(yǔ)言,非常簡(jiǎn)潔和強(qiáng)大,之前用ini也能寫(xiě)配置文件,看了yaml后,發(fā)現(xiàn)這個(gè)更直觀,更方便,有點(diǎn)類似于json格式
2.yaml基本語(yǔ)法規(guī)則:
? ? ? ? ? ?大小寫(xiě)敏感
? ? ? ? ? 使用縮進(jìn)表示層級(jí)關(guān)系
? ? ? ? ? 縮進(jìn)時(shí)不允許使用Tab鍵,只允許使用空格。
? ? ? ? ? 縮進(jìn)的空格數(shù)目不重要,只要相同層級(jí)的元素左側(cè)對(duì)齊即可
? ? ? ? ? #表示注釋,從這個(gè)字符一直到行尾,都會(huì)被解析器忽略,這個(gè)和python的注釋一樣
3.yaml支持的數(shù)據(jù)結(jié)構(gòu)有三種:
? ? ? ? 對(duì)象:鍵值對(duì)的集合,又稱為映射(mapping)/ 哈希(hashes) / 字典(dictionary)
? ? ? ? 數(shù)組:一組按次序排列的值,又稱為序列(sequence) / 列表(list)
? ? ? ? 純量(scalars):?jiǎn)蝹€(gè)的、不可再分的值。字符串、布爾值、整數(shù)、浮點(diǎn)數(shù)、Null、時(shí)間、日期
字典如下:
#python
"data":?
? ? ? ? {? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? “user”: "admin",? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ?"pasword": "123456"
? ? ? ?}
# yaml
data:
? ? ? ? ?user: admin
? ? ? ? ?password: 123456
list如下
#python?
[{'admin1': 123456}, {'admin2': 111111}, {'admin3': 222222}]?
#yaml
- admin1: 123456
- admin2: 111111
- admin3: 222222?
純量如下:
yaml? ? ? ? ? ? ? ? ? ?python
n1:12.30? ? ? ? ? ? n1=12.3
n2: true? ? ? ? ? ? ? n2=True
n3: false? ? ? ? ? ? n3=False
n4: ~? ? ? ? ? ? ? ? ? n4=None
4.使用pip安裝pyyaml模塊:
? ? ? ? pip install pyyaml
二? python讀取yaml文件
yaml文件示例:
- desc: 正常登錄
? url: http://ip:auth/oauth/token
? headers:
? ?Authorization: Basic cGlnOnBpZw==
? method: post
? datail: 正常登錄
? data:
? ? username: admin
? ? password: lucy
? ? grant_type: password
- desc: 密碼錯(cuò)誤
? url: http://ip:auth/oauth/token
? headers:
? ? Authorization: Basic cGlnOnBpZw==
? method: post
? datail: 密碼錯(cuò)誤
? data:
? ? username: admin
? ? password: 123456
? grant_type: password
python文件示例
import yaml
import requests
with open('data.yaml','r',encoding='utf-8') as f:
? ? ?file_content=f.read()
contet=yaml.load(file_content,yaml.FullLoader)
for item1 in contet:
? ? data=item1['data']
? ?url=item1['url']
? headers=item1['headers']
? if item1['method']=="get":
? ? ? ? response=requests.get(url=url,data=data,headers=headers)
? ? ? ? print(response.text)
? else:
? ? ? ? response=requests.post(url=url,data=data,headers=headers)
? ? ? ?print(response.text)
輸出結(jié)果如下:
{"access_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsaWNlbnNlIjoibWFkZSBieSBob25nZGlhbjE1OTI3IiwidXNlcl9uYW1lIjoiYWRtaW4iLCJzY29wZSI6WyJzZXJ2ZXIiXSwiZXhwIjoxNTk4ODcwNzY2LCJ1c2VySWQiOjEsImF1dGhvcml0aWVzIjpbIlJPTEVfQURNSU4iLCJST0xFX1VTRVIiXSwianRpIjoiMGI5MTU0MzMtM2M2Mi00M2NkLWI1NWQtMmI4OWYxNTQ1ZmM2IiwiY2xpZW50X2lkIjoicGlnIn0.qlLu9QmTVZ2Ss53hQ1DcAa9rpmCELLAIfHyO6vAKJ-g","token_type":"bearer","refresh_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsaWNlbnNlIjoibWFkZSBieSBob25nZGlhbjE1OTI3IiwidXNlcl9uYW1lIjoiYWRtaW4iLCJzY29wZSI6WyJzZXJ2ZXIiXSwiYXRpIjoiMGI5MTU0MzMtM2M2Mi00M2NkLWI1NWQtMmI4OWYxNTQ1ZmM2IiwiZXhwIjoxNjAxNDMzOTY2LCJ1c2VySWQiOjEsImF1dGhvcml0aWVzIjpbIlJPTEVfQURNSU4iLCJST0xFX1VTRVIiXSwianRpIjoiNDRmYWU3ODUtZWQzZS00ZGRlLTkwZTktNmM5MDZmYzAxYzNkIiwiY2xpZW50X2lkIjoicGlnIn0.u57tUCzMLcwR5MfOTDyQ2xcjzpV-J4fFoHHiExUlOxk","expires_in":28799,"scope":"server","license":"made by hongdian15927","userId":1,"jti":"0b915433-3c62-43cd-b55d-2b89f1545fc6"} {"error":"invalid_grant","error_description":"用戶名不存在或者密碼錯(cuò)誤"}?