python-YAML
YAML 是一種簡潔的非標記語言。其以數據為中心,使用空白,縮進,分行組織數據,從而使得表示更加簡潔。主要是作為項目的配置文件。
文件格式
基本規則:
-
大小寫敏感
-
使用縮進表示層級關系
-
縮進時不允許使用Tab鍵,只允許使用空格。
-
縮進的空格數目不重要,只要相同層級的元素左側對齊即可
-
使用#表示注釋
-
字符串可以不用引號標注
yaml 支持的數據結構有三種:
- 對象:鍵值對的集合,又稱為映射(mapping)/ 哈希(hashes) / 字典(dictionary)
- 數組:一組按次序排列的值,又稱為序列(sequence) / 列表(list)
- 純量(scalars):單個的、不可再分的值。字符串、布爾值、整數、浮點數、Null、時間、日期
數組序列
- admin1: 123456
- admin2: 111111
- admin3: 222222
輸出:[{'admin1': 123456},
{'admin2': 111111},
{'admin3': 222222}]
純量
n1: 52.10
---------------------------------------------------------------
n2: true
n3: false #不區分大小寫
---------------------------------------------------------------
None用~表示
n4: ~
輸出:{'n1': 52.1}
---------------------------------------------------------------
輸出:{'n2': True, 'n3': False}
---------------------------------------------------------------
輸出:{'n4': None}
鍵值對
user: admin
pwd: 123
job:
- teacher
- nurese
{'user': 'admin',
'pwd': 123,
'job': ['teacher', 'nurese']}
混合使用
1.list嵌套dict
- user: admin1
psw: '123456'
- user: admin2
psw: '111111'
- user: admin3
psw: '222222'
用python讀取出來的結果:
[{'user': 'admin1', 'psw': '123456'},
{'user': 'admin2', 'psw': '111111'},
{'user': 'admin3', 'psw': '222222'}]
2.dict嵌套list
nub1:
- admin1
- '123456'
nb2:
- admin2
- '111111'
nb3:
- admin3
- '222222'
用python讀取出來的結果:
{'nub1': ['admin1', '123456'],
'nb2': ['admin2', '111111'],
安裝創建
pip install pyyaml
1、創建一個file,前面文件名稱隨便,后面文件后綴 .yaml
2、 編寫 yaml
# 簡介
name: zhangsan
age: 20
profession:
name: fawaikuangtu
annual: 1k
skill:
- name: zhangwu
pay: 1K
- name2: lisi
pay: 2K
讀取yaml
import yaml
f = open(r'./name.yaml','r',encoding='utf-8')
result = f.read()
print(result)
---------------------------------------------------------------
#由於官方提示load方法存在安全漏洞,所以讀取文件時會報錯。加上warning忽略,就不會顯示警告
yaml.warnings({'YAMLLoadWarning':False})
pyres=yaml.load(result)
# 或者
pyres=yaml.safe_load(result) # yaml.load() 發出警告
# 因為python認為load是不安全的,發出了安全警告,那么我們如何取消警告呢?
print(pyres)
print(result)
name: zhangsan
age: 20
profession:
name: fawaikuangtu
annual: 1k
skill:
- name: zhangwu
pay: 1K
- name2: lisi
pay: 2K
---------------------------------------------------------------
print(pyres)
{'name': 'zhangsan', 'age': 20, 'profession': {'name': 'fawaikuangtu', 'annual': '1k'}, 'skill': [{'name': 'zhangwu', 'pay': '1K'}, {'name2': 'lisi', 'pay': '2K'}]}
文件寫入
import yaml
import os
def yaml_doc(yampath):
data={'school':'luoxiang',
'studens':['zhangsan','lisi']}
file=open(yampath,'w',encoding='utf-8')
yaml.dump(data,file)
file.close()
currentpath=os.path.abspath('.') #獲取當前路徑
yamlpath=os.path.join(currentpath,'xingfa.yaml') #創建yaml文件
yaml_doc(yamlpath)
---------------------------------------------------------------
輸出:
generate.yaml文件
school: luoxiang
studens:
- zhangsan
- lisi
