<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
YAML是可讀性高,用來表達資料序列化格式的,專用於寫組態檔的語言。YAML檔案其實也是一種組態檔型別,字尾名是.yaml或.yml都可以。其以資料為中心,使用空白,縮排,分行組織資料,從而使得表示更加簡潔。
物件:鍵值對的集合(簡稱"對映或字典")
鍵值對用冒號 “:” 結構表示 冒號與值之間需用空格分隔
陣列:一組按序排列的值(簡稱"序列或列表")
陣列前加有 “-” 符號 符號與值之間需用空格分隔
純量(scalars):單個的、不可再份的值(如:字串、bool值、整數、浮點數、時間、日期、null等)
None值可用null,也可用~
表示
# 物件:yaml鍵值對;即Python中字典 user: 'admin' pwd: 'admin@123' site: "www.yaml.com" # 解析後: {'user': 'admin', 'password': 'admin@123', 'site': 'www.yaml.com'} # 2. 陣列:yaml鍵值對中巢狀陣列 user2: - a - b - c user3: - d # 解析後:{'user2':['a','b','c'],'user3':['d']} # 3. 純量 val_name: name # 字串: {'val_name': 'name'} spec_val: "namen" # 特殊字串: {'spec_val': 'namen'} pi_val: 3.14 # 數位: {'pi_val': 3.14} bol_val: true # 布林值: {'bol_val': true} nul_val: null # null值: {'nul_val': None} nul_val: ~ # null值: {'nul_val': None} time_val: 2023-02-03t22:33:22.33-03:00 # 時間值:{'time_val': datetime.datetime(2023, 2, 3, 22, 33, 22, 330000)} date_val: 2024-01-01 # 日期值:{'date_val': datetime.date(2024, 1, 1)} # 4. 參照 name: &name 白雲 tester: *name # 相當於 name: 白雲 tester: 白雲 # 解析後內容:{'name': '白雲', 'tester': '白雲'} # 5. 強制轉換 str: !!str 3.14 int: !!int "666" # 輸出: {'str': '3.14','int': 123}
pip install pyyaml
yaml檔案內容為:
user1: name: xm stu: 101 user2: name: xh stu: 102 user3: name: xl stu: 103
程式程式碼:
import yaml import os class ReadYAML(object): def read_yaml(self,yaml_file): with open(yaml_file,'r',encoding='utf-8') as f: file_data = f.read() print("file_data型別:",type(file_data)) data = yaml.safe_load(file_data) print("data型別:",type(data)) return data if __name__ == "__main__": base_name = os.path.dirname(os.path.realpath(__file__)) yaml_path = os.path.join(base_name,'test.yaml') ry = ReadYAML() res = ry.read_yaml(yaml_path) print(res)
輸出結果:
file_data型別: <class 'str'>
data型別: <class 'dict'>
{'user1': {'name': 'xm', 'stu': 101}, 'user2': {'name': 'xh', 'stu': 102}, 'user3': {'name': 'xl', 'stu': 103}}
yaml檔案內容為:
class1: - stu1 - stu2 - stu3 class2: - stu2
程式程式碼:
import yaml import os class ReadArraysYAML(object): def read_yaml(self,yaml_file): with open(yaml_file,'r',encoding='utf-8') as f: file_data = f.read() # print("file_data型別:",type(file_data)) data = yaml.safe_load(file_data) # print("data型別:",type(data)) return data if __name__ == "__main__": base_name = os.path.dirname(os.path.realpath(__file__)) yaml_path = os.path.join(base_name,'arrays.yaml') ry = ReadArraysYAML() res = ry.read_yaml(yaml_path) print(res)
輸出結果:
{'class1': ['stu1', 'stu2', 'stu3'], 'class2': ['stu2']}
yaml檔案內容:
# 分段yaml檔案中存在多個檔案 --- animal1: dog age: 1 --- animal2: cat age: 2
程式程式碼:
""" 多檔案同在一份yaml檔案中時的讀取方法(使用yaml.safe_load_all()) """ import yaml import os def get_yaml_load_all(yaml_file): file = open(yaml_file,'r',encoding='utf-8') file_data = file.read() file.close() all_data = yaml.safe_load_all(file_data) for data in all_data: print(data) if __name__ == "__main__": current_path = os.path.dirname(__file__) print(current_path) yaml_path = os.path.join(current_path,'muti.yaml') get_yaml_load_all(yaml_path)
輸出結果:
d:PyProjectYAML
{'animal1': 'dog', 'age': 1}
{'animal2': 'cat', 'age': 2}
程式程式碼:
""" 使用yaml.dump()方法將列表或字典資料寫入進已存在的yaml檔案 """ import yaml import os def generate_yaml_doc(yaml_file): py_object = {'school':'Fxxking U','student':['stu1','stu2']} file = open(yaml_file,'w',encoding='utf-8') yaml.safe_dump(py_object,file) file.close() if __name__ == "__main__": current_path = os.path.dirname(__file__) print(current_path) yaml_path = os.path.join(current_path,'generateYAML.yaml') generate_yaml_doc(yaml_path)
寫入後,YAML檔案內容:
school: Fxxking U student: - stu1 - stu2
注:若想要以追加的形式寫入,只需將open()中的’w’改為’a’即可
修改前YAML檔案內容:
school: Fxxking U student: - stu1 - stu2
程式程式碼:
import yaml import os from readArraysYAML import ReadArraysYAML def update_yaml(k,v,yaml_file): readY = ReadArraysYAML() old_data = readY.read_yaml(yaml_file) old_data[k] = v # 修改讀取的資料,如果k不存在則新增一組鍵值對 with open(yaml_file,'w',encoding='utf-8') as f: yaml.safe_dump(old_data,f) if __name__ == "__main__": current_path = os.path.dirname(__file__) yaml_path = os.path.join(current_path,'generateYAML.yaml') k = 'school' v = 'SZ U' update_yaml(k,v,yaml_path)
修改後,YAML檔案內容:
school: SZ U student: - stu1 - stu2
安裝ruamel庫
pip install ruamel.yaml
程式程式碼:
from ruamel import yaml import os def generate_yaml_doc_ruamel(yaml_file): py_object = {'file_type':'ruamel_yaml','school':'Fxxking U','student':['c','d']} with open(yaml_file,'w',encoding='utf-8') as f: yaml.dump(py_object,f,Dumper=yaml.RoundTripDumper) if __name__ == "__main__": current_path = os.path.dirname(__file__) yaml_path = os.path.join(current_path,'ruamelGenerateYAML.yaml') generate_yaml_doc_ruamel(yaml_path) print("寫入成功!")
寫入後,YAML檔案內容:
file_type: ruamel_yaml school: Fxxking U student: - c - d
到此這篇關於Python使用yaml模組操作YAML檔案的文章就介紹到這了,更多相關Python使用yaml模組內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45