python處理yaml文件的操作方法
yaml文件簡介
yaml 文件是一種數據序列化語言,廣泛用于配置文件、日志文件、等
語言特點
- 大小寫敏感
- 使用縮進表示層級關系
- 縮進時不允許使用Tab鍵,只允許使用空格。
- 縮進的空格數目不重要,只要相同層級的元素左側對齊即可
yaml數據結構
yaml語言包含三種數據結構:
- mappings (hashes/dictionaries) 對象
- sequences (arrays/lists) 數組
- scalars (strings/numbers) 純量
以下是標記語言和轉化為python 對象后的輸出
數組
數組以 - 和 空格 來標記
- name1 - name2 - name3
output: 轉為list
['name1', 'name2', 'name3']
對象
對象用: 和 空格 標識
name: Ling email: ww.aa.com
output: 轉為dict
{'name': 'Ling', 'email': 'ww.aa.com'}
數據對象混合
對象value為數組/ 對象
american: - Boston Red Sox - Detroit Tigers - New York Yankees national: - New York Mets - Chicago Cubs - Atlanta Braves: - A - B
多維數組
- - Boston Red Sox - Detroit Tigers - New York Yankees - - New York Mets - Chicago Cubs - Atlanta Braves
純量
- 字符串
- 布爾值
- 整數
- 浮點數
- Null
- 時間
- 日期
boolean:
- TRUE #true,True,TRUE都可以
- FALSE #false,False, FALSE都可以
float:
- 3.14
- 6.8523015e+5 #可以使用科學計數法
int:
- 123
- 0b1010_0111_0100_1010_1110 #二進制表示
kongzhi:
parent: ~ #使用~表示null
class: null #null也表示null
string:
- 哈哈
- 'Hello world: from this way' #如果字符串之中包含空格或特殊字符,需要放在引號之中,可以使用雙引號或者單引號包裹特殊字符
- 寫多行 #換行服會轉義成空格
date:
- 2018-02-17 #日期必須使用ISO 8601格式,即yyyy-MM-dd
- 2018-02-17 12:23:34 #標準帶時間格式
output如下:
{'boolean': [True, False], 'float': [3.14, 685230.15], 'int': [123, 685230], 'kongzhi': {'parent': None, 'class': None}, 'string': ['哈哈', 'Hello world: from this way', '寫多行'], 'date1': [datetime.date(2018, 2, 17), datetime.datetime(2018, 2, 17, 12, 23, 34)]}注意上述date轉換成python 字典后,轉成json會報錯
xx={'date1': [datetime.date(2018, 2, 17), datetime.datetime(2018, 2, 17, 12, 23, 34)]}
print(json.dumps(xx, indent=4))
# 運行錯誤如下:
TypeError: Object of type date is not JSON serializable注釋
注釋以“#” 標識
- name1 #this is first name - name2 - name3
錨點和引用
& 用來建立錨點,<< 表示合并到當前數據,* 用來引用錨點
舉例如下:
defaults: &defaults adapter: postgres host: localhost development: database: myapp_development <<: *defaults test: database: myapp_test <<: *defaults
python操作yaml文件
安裝工具包
pip install pyyaml
pyyaml官網文檔
https://pyyaml.org/wiki/PyYAMLDocumentation
常用方法
這里的常用方法和 json 操作類似
將yml文件轉換成 python中數據
由于 yaml.load() 方法不安全,建議使用yaml.safe_load() 函數
import yaml
# 直接打開文件,獲取文件內容,轉換成python dict 數據格式
# 這里要考慮關閉文件
file_data = open('./config/login_data.yaml')
data = yaml.load(file_data, yaml.SafeLoader) # 相當于 safe_load 方法
print(data)
file1.close()
# 使用with 方法,可以不用手動關閉文件
# 這里設置encoding 是為了yaml 文件有中文時進行處理
with open('./config/login_data.yaml', encoding='utf-8') as f:
elem_locators = yaml.safe_load(f) # 傳入的是 yaml字符串或者文件句柄
print(elem_locators)將python數據轉換成 寫入yml 文件
使用 yaml.dump 函數,暫時不在此介紹
清空yaml文件
trucate()
yaml 常用的方法就是 讀取、寫入 和 清空
讀取文件的內容
可以加多個fixtrue
可以加多個斷言
注意點
yaml中有中文
如yaml中有中文,需要使用 字符串.encode('utf-8')或打開文件時指定encoding='utf-8'
參考鏈接
yaml語言介紹
- YAML 入門教程: https://www.runoob.com/w3cnote/yaml-intro.html
- YAML Ain’t Markup Language (YAML™) version 1.2: https://yaml.org/spec/1.2.2/#chapter-2-language-overview
- YAML 語言教程: https://www.ruanyifeng.com/blog/2016/07/yaml.html
python 操作yaml
- PyYAML Documentation https://pyyaml.org/wiki/PyYAMLDocumentation
到此這篇關于python處理yaml文件的操作方法的文章就介紹到這了,更多相關python處理yaml文件 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python中encode和encoding的區(qū)別小結
encode和encoding在Python中雖然都與字符編碼相關,但它們的角色和用途是不同的,本文主要介紹了Python中encode和encoding的區(qū)別小結,具有一定的參考價值,感興趣的可以了解一下2024-03-03
Python+PyQt5開發(fā)一個全屏水印批量添加工具
本文詳細介紹了如何使用Python和PyQt5開發(fā)一個功能強大的全屏水印批量添加工具,支持PDF和多種圖片格式,具備完整的GUI界面和批量處理能力,希望對大家有所幫助2025-09-09
pandas中DataFrame新增行及global變量的使用方式
這篇文章主要介紹了pandas中DataFrame新增行及global變量的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02
詳解pandas使用drop_duplicates去除DataFrame重復項參數
這篇文章主要介紹了詳解pandas使用drop_duplicates去除DataFrame重復項參數,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-08-08

