yaml自定義與讀取


簡介

yaml[ˈjæməl]: Yet Another Markup Language。yaml 是專門用來寫配置文件的語言,非常簡潔和強大,之前用ini也能寫配置文件,看了yaml后,發現這個更直觀,更方便,有點類似於json格式

基本語法:

  • 大小寫敏感
  • 使用縮進表示層級關系
  • 縮進時不允許使用tab鍵,只能使用空格
  • 縮進的空格數目不重要,只要相同層級的元素左對齊即可
  • '#' 表示注釋,與python類似

支持的數據結構:

  • 對象: 鍵值對的集合,又稱字典
  • 數組: 列表/序列
  • 純量: 單個的、不可再分的值。字符串、布爾值、整數、浮點數

安裝

pip instal pyyaml

鍵值對(dict)

# python
{
    "user": "admin",
    "pwd": "123456",
}
# yaml
user: admin
pwd: 123456

字典嵌套字典

# python
"nb1":{
    "user": "admin",
    "pwd": "123456",
}
# yaml
nb1:
    user: admin
    pwd: 123456

序列

yaml里面寫一個數組,前面加一個'-'符號

- admin1: 123
- admin2: 345

純量

  • int/float: n1: 12.30
  • bool: n2: true
  • None: n4: ~
  • 強制轉換類型: n6: !!str 123, int->str

混合使用

  • list嵌套dict
# yaml
- user: admin1
  pwd: '123'
- user: admin2
  pwd: '234'
- user: admin3
  pwd: '413'

用python讀出來的結果

[
{'user': 'admin1', 'pwd': '123'}, 
{'user': 'admin2', 'pwd': '234'}, 
{'user': 'admin3', 'pwd': '413'}
]

yaml.load()出現警告的解決辦法

Warning: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.

YAML 5.1版本后棄用了yaml.load(file)這個用法,因為覺得很不安全,5.1版本之后就修改了需要指定Loader,通過默認加載​​器(FullLoader)禁止執行任意函數,該load函數也變得更加安全

e.g.

yaml.load(input, Loader=yaml.FullLoader)

實際應用例子

有一個yaml配置文件,希望能讓用戶自定義神經網絡,而不是使用完整的task_list,並且對於這些自定義的網絡,也采用自定義的數據類型進行量化

# test.aml
caffe_models:
  - imagenet
  - mobilenet_v2
  - resnet50
  - inception_v3
  - imagenet
  - yolo_v2
  - alexnet
  - squeezenet_v1.0
  - lenet
  - mobilenet

dtype_list:
  - asymmetric_quantized-u8

大概的思路:

import yaml
import os

yaml_path = os.path.join('test.aml')

f = open(yaml_path, 'r', encoding="utf-8")
cfg = f.read() 

content = yaml.load(cfg, Loader=yaml.FullLoader)  

task_list = []

for key in content:
    if key == "caffe_models":
        for value in content[key]:
            task = (key, value)
            task_list.append(task)

print('#'*100)
print(task_list) 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM