天天看點

python讀取yaml檔案1.簡介2.yaml檔案的讀取with語句讀取3. 檔案寫入FAQ:

1.簡介

YAML 的意思其實是:"Yet Another Markup Language"(仍是一種标記語言)。

官方文檔:https://pyyaml.org/wiki/PyYAMLDocumentation

安裝:pip3  install pyyaml

使用import導入:import yaml

2.yaml檔案的讀取

需要讀取的yaml檔案内容如下:

mysql:
    host: 127.0.0.1 
    port: 3306
    db: mysql
    pwd: mysql

redis:
    host: 127.0.0.1
    port: 3679
    db: redis
    pwd: redis
           

讀取yaml檔案

import yaml
import json
yamlPath = r"E:\code\config.yml"
f = open(yamlPath,'r',encoding='utf-8')
data = yaml.load(f, Loader=yaml.FullLoader)
print(json.dumps(data, sort_keys=True, indent=4, separators=(',', ':'), ensure_ascii=False))
           

with語句讀取

import yaml
yamlPath = r"E:\code\config.yml"
with open(file=yamlPath, mode="rb") as f:
    infos = yaml.load(f, Loader=yaml.FullLoader)
    print(infos)
           

輸出:

{
    "mysql":{
        "db":"mysql",
        "host":"127.0.0.1",
        "port":3306,
        "pwd":"mysql"
    },
    "redis":{
        "db":"redis",
        "host":"127.0.0.1",
        "port":3679,
        "pwd":"redis"
    }
}
           

3. 檔案寫入

import yaml
yamlPath = r"E:\code\config.yml"
f = open(yamlPath,'a',encoding='utf-8')
data = {
    "username": "zs",
    "age": 18,
    "hobby": ["Basketball", "eat", True]

}
yaml.dump(data, f)
           

再讀取輸出:

{
    "age":18,
    "hobby":[
        "Basketball",
        "eat",
        true
    ],
    "mysql":{
        "db":"mysql",
        "host":"127.0.0.1",
        "port":3306,
        "pwd":"mysql"
    },
    "redis":{
        "db":"redis",
        "host":"127.0.0.1",
        "port":3679,
        "pwd":"redis"
    },
    "username":"zs"
}
           

FAQ:

python讀取yaml檔案1.簡介2.yaml檔案的讀取with語句讀取3. 檔案寫入FAQ:

警告描述:使用 yaml.load(f)方法讀取檔案時,不傳Loader參數會有警告

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

警告解決:使用參數Loader, 取值參考:https://github.com/yaml/pyyaml/wiki/PyYAML-yaml.load(input)-Deprecation