python yaml模組介紹

2021-09-24 23:17:13 字數 4773 閱讀 9615

yaml是乙個專門用來寫配置檔案的語言。

1. yaml檔案規則

2. yaml檔案資料結構1. 前提條件

python中讀取yaml檔案前需要安裝pyyaml和匯入yaml模組:

2. 讀取yaml檔案資料

python通過open方式讀取檔案資料,再通過load函式將資料轉化為列表或字典;

import yaml

import os

def

get_yaml_data

(yaml_file):

# 開啟yaml檔案

print(「獲取yaml檔案資料」)

file = open(yaml_file, 『r』, encoding=「utf-8」)

file_data = file.read()

file.close()

print(file_data)

print("型別:", type(file_data))

# 將字串轉化為字典或列表

print("***轉化yaml資料為字典或列表***")

data = yaml.load(file_data)

print(data)

print("型別:", type(data))

return data

current_path = os.path.abspath(".")

yaml_path = os.path.join(current_path, 「config.yaml」)

get_yaml_data(yaml_path)

***獲取yaml檔案資料*** # yaml鍵值對:即python中字典 usr: my psw: 123455 型別:***轉化yaml資料為字典或列表*** 型別:"""

3. yaml檔案資料為鍵值對

(1)yaml檔案中內容為鍵值對:

# yaml鍵值對:即python中字典

usr: my

psw: 123455

s: " abc\n"

python解析yaml檔案後獲取的資料:

(2)yaml檔案中內容為「鍵值對'巢狀"鍵值對"

# yaml鍵值對巢狀:即python中字典巢狀字典

usr1:

name: a

psw: 123

usr2:

name: b

psw: 456

python解析yaml檔案後獲取的資料:

, 'usr2': }
(3)yaml檔案中「鍵值對」中巢狀「陣列」

# yaml鍵值對中巢狀陣列

usr3:

- a- b

- cusr4:

- b

python解析yaml檔案後獲取的資料:

4. yaml檔案資料為陣列

(1)yaml檔案中內容為陣列

# yaml陣列

- a- b

- 5

python解析yaml檔案後獲取的資料:

['a', 'b', 5]
(2)yaml檔案「陣列」中巢狀「鍵值對」

# yaml"陣列"中巢狀"鍵值對"

- usr1: aaa

- psw1: 111

usr2: bbb

psw2: 222

python解析yaml檔案後獲取的資料:

[, ]
5. yaml檔案中基本資料型別:
# 純量

s_val: name # 字串:

spec_s_val: "name\n"

# 特殊字串:

bol_val: true

# 布林值:

nul_val: null

# null值:

nul_val1: ~ # null值:

time_val: 2018

-03-01t11:33:22.55

-06:00

# 時間值:

date_val: 2019

-01-10

# 日期值:

6. yaml檔案中引用

yaml檔案中內容

animal3: &animal3 fish

test: *animal3

python讀取的資料

1. 多個文件在乙個yaml檔案,使用 --- 分隔方式來分段

如:yaml檔案中資料

# 分段yaml檔案中多個文件

---animal1: dog

age: 2

---animal2: cat

age: 3

2. python指令碼讀取乙個yaml檔案中多個文件方法

python獲取yaml資料時需使用load_all函式來解析全部的文件,再從中讀取物件中的資料

# yaml檔案中含有多個文件時,分別獲取文件中資料

defget_yaml_load_all

(yaml_file):

# 開啟yaml檔案

file = open(yaml_file, 'r', encoding="utf-8")

file_data = file.read()

file.close()

all_data = yaml.load_all(file_data)

for data in all_data:

print(data)

current_path = os.path.abspath(".")

yaml_path = os.path.join(current_path, "config.yaml")

get_yaml_load_all(yaml_path)

"""結果

"""

1. 直接匯入yaml(即import yaml)生成的yaml文件

通過yaml.dump()方法不會將列表或字典資料進行轉化yaml標準模式,只會將資料生成到yaml文件中

# 將python物件生成yaml文件

import yaml

defgenerate_yaml_doc

(yaml_file):

py_object =

file = open(yaml_file, 'w', encoding='utf-8')

yaml.dump(py_object, file)

file.close()

current_path = os.path.abspath(".")

yaml_path = os.path.join(current_path, "generate.yaml")

generate_yaml_doc(yaml_path)

"""結果

school: zhang

students: [a, b]

"""

2. 使用ruamel模組中的yaml方法生成標準的yaml文件

(1)使用ruamel模組中yaml前提條件

(2)ruamel模組生成yaml文件

def

generate_yaml_doc_ruamel

(yaml_file):

from ruamel import yaml

py_object =

file = open(yaml_file, 'w', encoding='utf-8')

yaml.dump(py_object, file, dumper=yaml.roundtripdumper)

file.close()

current_path = os.path.abspath(".")

yaml_path = os.path.join(current_path, "generate.yaml")

generate_yaml_doc_ruamel(yaml_path)

"""結果

school: zhang

students:

- a- b

"""

(3)ruamel模組讀取yaml文件

# 通過from ruamel import yaml讀取yaml檔案

defget_yaml_data_ruamel

(yaml_file):

from ruamel import yaml

file = open(yaml_file, 'r', encoding='utf-8')

data = yaml.load(file.read(), loader=yaml.loader)

file.close()

print(data)

current_path = os.path.abspath(".")

yaml_path = os.path.join(current_path, "dict_config.yaml")

get_yaml_data_ruamel(yaml_path)

Python yaml檔案操作

一 yaml檔案的使用注意事項 載入yaml檔案函式 data yaml.load f 我在實際測試中用的是yaml.safe load f 可以正常,用yaml.load f 會報錯因為python3之後已經改成了safe load f 1.首先yaml檔案裡的格式必須為字典,否則會報錯 2.ya...

python yaml的基本使用

1 希望輸出全為字典的格式 tagid 3 json null 則應該在yaml檔案中寫成 get method post url params access token tagid 3 json 2 若希望tagid為乙個列表,如下 class 則yaml檔案的寫法 tagid name clas...

Python yaml 使用的包

通常 python 使用的 yaml 檔案處理的包有 2 個。可以理解為 pyyaml 是 python 自帶的 yaml 資料處理庫,ruamel.yaml 是 pyyaml 的增強版。因此使用 ruamel.yaml 的會比較多,而且很多語法和函式都是通用的。pyyaml 和 ruamel.ya...