电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

詳解Python中Pyyaml模塊的使用

瀏覽:5日期:2022-07-09 08:27:25

一、YAML是什么

YAML是專門用來寫配置文件的語言,遠比JSON格式方便。

YAML語言的設計目標,就是方便人類讀寫。

YAML是一種比XML和JSON更輕的文件格式,也更簡單更強大,它可以通過縮進來表示結構,是不是聽起來就和Python很搭?

顧名思義,用語言編寫的文件就可以稱之為YAML文件。PyYaml是Python的一個專門針對YAML文件操作的模塊,使用起來非常簡單

安裝 pip install pyyaml # 如果是py2,使用 pip install yaml

二、PyYaml的簡單使用

使用起來非常簡單,就像json、pickle一樣,load、dump就足夠我們使用了。

load()示例:返回一個對象

import yamlyaml_str = '''name: 一條大河age: 1956job: Singer'''y = yaml.load(yaml_str, Loader=yaml.SafeLoader)print(y)

運行結果:

{’name’: ’一條大河’, ’age’: 1956, ’job’: ’Singer’}

load_all()示例:生成一個迭代器

如果string或文件包含幾塊yaml文檔,可以使用yaml.load_all來解析全部的文檔。

yaml_test.yaml文件內容:

---name: qiyuage: 20歲---name: qingqingage: 19歲

操作yaml文件的test.py文件如下:

import yamlwith open('./yaml_test', ’r’, encoding=’utf-8’) as ymlfile: cfg = yaml.load_all(ymlfile, Loader=yaml.SafeLoader) for data in cfg: print(data)

運行結果:

{’name’: ’qiyu’, ’age’: ’20歲’}{’name’: ’qingqing’, ’age’: ’19歲’}

dump()示例:將一個python對象生成為yaml文檔

import yamljson_data = {’name’: ’一條大河’, ’age’: 1956, ’job’: [’Singer’,’Dancer’]}y = yaml.dump(json_data, default_flow_style=False).encode(’utf-8’).decode(’unicode_escape’)print(y)

運行結果:

age: 1956job:- Singer- Dancername: '一條大河'

使用dump()傳入參數,可以直接把內容寫入到yaml文件:

import yamljson_data = {’name’: ’一條大河’, ’age’: 1956, ’job’: [’Singer’, ’Dancer’]}with open(’./yaml_write.yaml’, ’w’) as f: y = yaml.dump(json_data, f) print(y)

寫入內容后的yaml_write.yaml:

詳解Python中Pyyaml模塊的使用

yaml.dump_all()示例:將多個段輸出到一個文件中

import yamlobj1 = {'name': 'river', 'age': 2019}obj2 = ['Lily', 1956]obj3 = {'gang': 'ben', 'age': 1963}obj4 = ['Zhuqiyu', 1994]with open(’./yaml_write_all.yaml’, ’w’, encoding=’utf-8’) as f: y = yaml.dump([obj1, obj2, obj3, obj4], f) print(y)with open(’./yaml_write_all.yaml’, ’r’) as r: y1 = yaml.load(r, Loader=yaml.SafeLoader) print(y1)

寫入內容后的yaml_write_all.yaml:

詳解Python中Pyyaml模塊的使用

為什么寫入文件后的格式有的帶1個“-”,有的帶2個“-”?

為什么yaml文件讀出來的的格式是List?

三、YAML的語法規則和數據結構

看完了以上4個簡單的示例,現在就來總結下YAML語言的基本語法

YAML 基本語法規則如下:

1、大小寫敏感

2、使用縮進表示層級關系

3、縮進時不允許使用Tab鍵,只允許使用空格。

4、縮進的空格數目不重要,只要相同層級的元素左側對齊即可

5、# 表示注釋,從這個字符一直到行尾,都會被解析器忽略,這個和python的注釋一樣

6、列表里的項用'-'來代表,字典里的鍵值對用':'分隔

知道了語法規則,現在來回答下上面的2個問題:

1、帶1個“-”表示不同的模塊(單個數組或者字典),帶2個“-”是因為數組中元素以“-”開始,加上表示不同模塊的那一個“-”,呈現出來就是2個“-”

2、因為yaml文件中包含多個模塊(多個數組或者字典),讀取出來的是這些模塊的一個集合

3、有且只有當yaml文件中只有1個字典時,讀取出來的數據的類型也是字典

YAML 支持的數據結構有3種:

1、對象:鍵值對的集合

2、數組:一組按次序排列的值,序列(sequence) 或 列表(list)

3、純量(scalars):單個的、不可再分的值,如:字符串、布爾值、整數、浮點數、Null、時間、日期

支持數據示例:

yaml_test_data.yaml的內容:

str: 'Big River' #字符串int: 1548 #整數float: 3.14#浮點數boolean: true #布爾值None: null# 也可以用 ~ 號來表示 nulltime: ’2019-11-20T08:47:46.576701+00:00’ # 時間,ISO8601 date: 2019-11-20 16:47:46.576702# 日期

操作代碼:

import yamlimport datetimeimport pytzyaml_data = { 'str': 'Big River', 'int': 1548, 'float': 3.14, ’boolean’: True, 'None': None, ’time’: datetime.datetime.now(tz=pytz.timezone(’UTC’)).isoformat(), ’date’: datetime.datetime.today()}with open(’./yaml_test’, ’w’) as f: y = yaml.dump(yaml_data, f) print(y)with open(’./yaml_test’, ’r’) as r: y1 = yaml.load(r, Loader=yaml.SafeLoader) print(y1)

控制臺輸出:

詳解Python中Pyyaml模塊的使用

其他語法規則

1、如果字符串沒有空格或特殊字符,不需要加引號,但如果其中有空格或特殊字符,就需要加引號了

詳解Python中Pyyaml模塊的使用

2、引用

& 和 * 用于引用

name: &name SKPtester: *name

運行結果:

{’name’: ’SKP’, ’tester’: ’SKP’}

3、強制轉換

用 !! 實現

str: !!str 3.14int: !!int '123'

運行結果:

{’int’: 123, ’str’: ’3.14’}

4、分段

在同一個yaml文件中,可以用“—”3個“-”來分段,這樣可以將多個文檔寫在一個文件中

舉例見上述load_all()示例

四、python對象生成yaml文檔

1、yaml.dump()方法

import yamlimport osdef generate_yaml_doc(yaml_file): py_object = {’school’: ’zhu’, ’students’: [’a’, ’b’]} 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: zhustudents:- a- b'''

2、使用ruamel模塊中的yaml方法生成標準的yaml文檔

import osfrom ruamel import yaml # pip3 install ruamel.yamldef generate_yaml_doc_ruamel(yaml_file): py_object = {’school’: ’zhu’, ’students’: [’a’, ’b’]} 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: zhustudents:- a- b'''

使用ruamel模塊中的yaml方法讀取yaml文檔(用法與單獨import yaml模塊一致)

import osfrom ruamel import yamldef get_yaml_data_ruamel(yaml_file): file = open(yaml_file, ’r’, encoding=’utf-8’) data = yaml.load(file, Loader=yaml.Loader) file.close() print(data)current_path = os.path.abspath('.')yaml_path = os.path.join(current_path, 'generate.yaml')get_yaml_data_ruamel(yaml_path)

到此這篇關于Python中Pyyaml模塊的使用的文章就介紹到這了,更多相關Python中Pyyaml模塊內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 奥因-光触媒除甲醛公司-除甲醛加盟公司十大品牌 | 仿古瓦,仿古金属瓦,铝瓦,铜瓦,铝合金瓦-西安东申景观艺术工程有限公司 | 深圳高新投三江工业消防解决方案提供厂家_服务商_园区智慧消防_储能消防解决方案服务商_高新投三江 | FFU_空气初效|中效|高效过滤器_空调过滤网-广州梓净净化设备有限公司 | 行星搅拌机,双行星搅拌机,动力混合机,无锡米克斯行星搅拌机生产厂家 | 卓能JOINTLEAN端子连接器厂家-专业提供PCB接线端子|轨道式端子|重载连接器|欧式连接器等电气连接产品和服务 | 食品机械专用传感器-落料放大器-低价接近开关-菲德自控技术(天津)有限公司 | 酒万铺-酒水招商-酒水代理 | 防水套管-柔性防水套管-刚性防水套管-上海执品管件有限公司 | 欧美日韩国产一区二区三区不_久久久久国产精品无码不卡_亚洲欧洲美洲无码精品AV_精品一区美女视频_日韩黄色性爱一级视频_日本五十路人妻斩_国产99视频免费精品是看4_亚洲中文字幕无码一二三四区_国产小萍萍挤奶喷奶水_亚洲另类精品无码在线一区 | 定量包装机,颗粒定量包装机,粉剂定量包装机,背封颗粒包装机,定量灌装机-上海铸衡电子科技有限公司 | 东莞市踏板石餐饮管理有限公司_正宗桂林米粉_正宗桂林米粉加盟_桂林米粉加盟费-东莞市棒子桂林米粉 | 云南丰泰挖掘机修理厂-挖掘机维修,翻新,再制造的大型企业-云南丰泰工程机械维修有限公司 | 百度关键词优化_网站优化_SEO价格 - 云无限好排名 | 臭氧发生器_臭氧消毒机 - 【同林品牌 实力厂家】 | Win10系统下载_32位/64位系统/专业版/纯净版下载 | 蔬菜配送公司|蔬菜配送中心|食材配送|饭堂配送|食堂配送-首宏公司 | 南京展台搭建-南京展会设计-南京展览设计公司-南京展厅展示设计-南京汇雅展览工程有限公司 | 钢格板|热镀锌钢格板|钢格栅板|钢格栅|格栅板-安平县昊泽丝网制品有限公司 | 铝板冲孔网,不锈钢冲孔网,圆孔冲孔网板,鳄鱼嘴-鱼眼防滑板,盾构走道板-江拓数控冲孔网厂-河北江拓丝网有限公司 | 桂林腻子粉_内墙外墙抗裂砂浆腻子粉推荐广西鑫达涂料厂家供应 | 卫浴散热器,卫浴暖气片,卫生间背篓暖气片,华圣格浴室暖气片 | 警方提醒:赣州约炮论坛真的安全吗?2025年新手必看的网络交友防坑指南 | 对辊破碎机_四辊破碎机_双齿辊破碎机_华盛铭重工 | 空冷器|空气冷却器|空水冷却器-无锡赛迪森机械有限公司[官网] | 求是网 - 思想建党 理论强党 | 上海律师事务所_上海刑事律师免费咨询平台-煊宏律师事务所 | 气象监测系统_气象传感器_微型气象仪_气象环境监测仪-山东风途物联网 | 污水/卧式/潜水/钻井/矿用/大型/小型/泥浆泵,价格,参数,型号,厂家 - 安平县鼎千泵业制造厂 | 海峰资讯 - 专注装饰公司营销型网站建设和网络营销培训 | 能量回馈_制动单元_电梯节能_能耗制动_深圳市合兴加能科技有限公司 | 智能化的检漏仪_气密性测试仪_流量测试仪_流阻阻力测试仪_呼吸管快速检漏仪_连接器防水测试仪_车载镜头测试仪_奥图自动化科技 | 艺术漆十大品牌_艺术涂料加盟代理_蒙太奇艺术涂料厂家品牌|艺术漆|微水泥|硅藻泥|乳胶漆 | 二手Sciex液质联用仪-岛津气质联用仪-二手安捷伦气质联用仪-上海隐智科学仪器有限公司 | 包塑软管|金属软管|包塑金属软管-闵彬管业 | 对辊式破碎机-对辊制砂机-双辊-双齿辊破碎机-巩义市裕顺机械制造有限公司 | 口信网(kousing.com) - 行业资讯_行业展会_行业培训_行业资料 | 钢格板|热镀锌钢格板|钢格栅板|钢格栅|格栅板-安平县昊泽丝网制品有限公司 | 宁夏档案密集柜,智能密集柜,电动手摇密集柜-盛隆柜业宁夏档案密集柜厂家 | 3d可视化建模_三维展示_产品3d互动数字营销_三维动画制作_3D虚拟商城 【商迪3D】三维展示服务商 广东健伦体育发展有限公司-体育工程配套及销售运动器材的体育用品服务商 | 重庆中专|职高|技校招生-重庆中专招生网 |