網站首頁 編程語言 正文
YAML是一種數據序列化格式,方便人類閱讀,且容易和腳本語言交互。常用于配置文件,也用于數據存儲或傳輸。
YAML格式
YAML三種基本數據類型:
1.標量:如字符串、整數和浮點數、日期
- 布爾值:“true”、“True”、“TRUE”、“yes”、“Yes"和"YES”,“false”、“False”、“FALSE”、“no”、“No"和"NO”
- 空:null、Null、
~
或不指定值;
2.數組:使用前導符號-
表示,且符號與值間要有空格;
3.對象:鍵值對集合;用冒號+空格:
分割;
YAML文件
文件基本規則:
區分大小寫;
使用縮進表示層級關系:
- 縮進要用空格(非Tab);
- 相同層級元素要左對齊;
字符串不需要使用引號括起,但有特殊字符串(如空格、冒號等)時必須使用引號;
使用#
注釋;
一個文件中可包含多份YAML文檔:
用---
(即三個中劃線)表示一份文檔的開始;
[可選]用...
(即三個小數點)表示一份文檔的結束;
---
# 這是第一份文檔
one: 1
# 其他內容...
...---
# 這是第二份文檔
two: 2
# 其他內容...
YAML操作
Python中有兩個YAML模塊:PyYAML和ruamel.yaml(pip3 install pyyaml
,pip3 install ruamel.yaml
)。
讀取
通過load函數可方便加載文檔內容,返回的內容可能是字典、列表或空:
import yaml def readYaml(file): # -> Union[dict, list, None]: with open(file, 'r', encoding='utf-8') as f: return yaml.load(f, yaml.Loader)
若文件中有多個文檔,需要使用load_all來加載;此時返回的是一個生成器,需要一次獲取每個文檔:
def readAllDoc(file) -> list: with open(file, 'r', encoding='utf-8') as f: docs = yaml.load_all(f, yaml.Loader) # return [d for d in docs] return list(docs)
存儲
yaml.dump()方法不會將列表或字典數據進行轉化yaml標準模式。需要通過ruamel.yaml來生成標準的yaml文檔。
import ruamel.yaml def createYaml(file, data: dict): with open(file, 'w', encoding='utf-8') as f: writer = ruamel.yaml.YAML() writer.indent(mapping=2, sequence=4, offset=2) writer.dump(data, f)
通過dump_all可把數組中的每個元素序列化為一個文檔:
def createAllDoc(file, data: list): with open(file, 'w', encoding='utf-8') as f: writer = ruamel.yaml.YAML() writer.indent(mapping=2, sequence=4, offset=2) writer.dump_all(data, f)
把[{'name': 'Mike', 'age': 12}, {'name': 'luce', 'age': 15}]
序列化。
dump會生成如下包含數組元素的yaml文件:
- name: Mike age: 12 - name: luce age: 15
dump_all會生成如下yaml文件(包含兩個文檔):
name: Mike age: 12 --- name: luce age: 15
示例
yaml讀取后為列表或字典。
轉字典
讀取的內容為一個字典:
name: mike age: 25 score: 80.5
返回的值為:
{
? "name": "mike",
? "age": 25,
? "score": 80.5
}
獲取里面值,先判斷是否存在,再讀取:
if 'name' in data: print(data['name'])
轉列表
讀取內容為一個列表:
- name: mike age: 24 - name: tom age: 30
返回的值為:
[
? {
? ? "name": "mike",
? ? "age": 24
? },
? {
? ? "name": "tom",
? ? "age": 30
? }
]
原文鏈接:https://blog.csdn.net/alwaysrun/article/details/126319983
相關推薦
- 2022-03-26 .NET?6中使用DateOnly和TimeOnly類型_ASP.NET
- 2023-01-27 Python異常與錯誤處理詳細講解_python
- 2022-08-28 項目中存在某文件,但是IDEA中看不到,如果新建該文件IDEA還提醒你文件已存在
- 2023-01-12 Python讀取mat(matlab數據文件)并實現畫圖_python
- 2022-12-09 C#中async和await的深入分析_C#教程
- 2022-07-16 gitee設置ssh key
- 2022-12-06 Python實現批量修改xml文件的腳本_python
- 2022-08-02 python?GUI編程實現掃雷游戲_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支