日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

詳解Python中Pyyaml模塊的使用

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

一、YAML是什么

YAML是專門用來寫配置文件的語(yǔ)言,遠(yuǎn)比JSON格式方便。

YAML語(yǔ)言的設(shè)計(jì)目標(biāo),就是方便人類讀寫。

YAML是一種比XML和JSON更輕的文件格式,也更簡(jiǎn)單更強(qiáng)大,它可以通過縮進(jìn)來表示結(jié)構(gòu),是不是聽起來就和Python很搭?

顧名思義,用語(yǔ)言編寫的文件就可以稱之為YAML文件。PyYaml是Python的一個(gè)專門針對(duì)YAML文件操作的模塊,使用起來非常簡(jiǎn)單

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

二、PyYaml的簡(jiǎn)單使用

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

load()示例:返回一個(gè)對(duì)象

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

運(yùn)行結(jié)果:

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

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

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

yaml_test.yaml文件內(nèi)容:

---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)

運(yùn)行結(jié)果:

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

dump()示例:將一個(gè)python對(duì)象生成為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)

運(yùn)行結(jié)果:

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

使用dump()傳入?yún)?shù),可以直接把內(nèi)容寫入到y(tǒng)aml文件:

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)

寫入內(nèi)容后的yaml_write.yaml:

詳解Python中Pyyaml模塊的使用

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

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)

寫入內(nèi)容后的yaml_write_all.yaml:

詳解Python中Pyyaml模塊的使用

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

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

三、YAML的語(yǔ)法規(guī)則和數(shù)據(jù)結(jié)構(gòu)

看完了以上4個(gè)簡(jiǎn)單的示例,現(xiàn)在就來總結(jié)下YAML語(yǔ)言的基本語(yǔ)法

YAML 基本語(yǔ)法規(guī)則如下:

1、大小寫敏感

2、使用縮進(jìn)表示層級(jí)關(guān)系

3、縮進(jìn)時(shí)不允許使用Tab鍵,只允許使用空格。

4、縮進(jìn)的空格數(shù)目不重要,只要相同層級(jí)的元素左側(cè)對(duì)齊即可

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

6、列表里的項(xiàng)用'-'來代表,字典里的鍵值對(duì)用':'分隔

知道了語(yǔ)法規(guī)則,現(xiàn)在來回答下上面的2個(gè)問題:

1、帶1個(gè)“-”表示不同的模塊(單個(gè)數(shù)組或者字典),帶2個(gè)“-”是因?yàn)閿?shù)組中元素以“-”開始,加上表示不同模塊的那一個(gè)“-”,呈現(xiàn)出來就是2個(gè)“-”

2、因?yàn)閥aml文件中包含多個(gè)模塊(多個(gè)數(shù)組或者字典),讀取出來的是這些模塊的一個(gè)集合

3、有且只有當(dāng)yaml文件中只有1個(gè)字典時(shí),讀取出來的數(shù)據(jù)的類型也是字典

YAML 支持的數(shù)據(jù)結(jié)構(gòu)有3種:

1、對(duì)象:鍵值對(duì)的集合

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

3、純量(scalars):?jiǎn)蝹€(gè)的、不可再分的值,如:字符串、布爾值、整數(shù)、浮點(diǎn)數(shù)、Null、時(shí)間、日期

支持?jǐn)?shù)據(jù)示例:

yaml_test_data.yaml的內(nèi)容:

str: 'Big River' #字符串int: 1548 #整數(shù)float: 3.14#浮點(diǎn)數(shù)boolean: true #布爾值None: null# 也可以用 ~ 號(hào)來表示 nulltime: ’2019-11-20T08:47:46.576701+00:00’ # 時(shí)間,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)

控制臺(tái)輸出:

詳解Python中Pyyaml模塊的使用

其他語(yǔ)法規(guī)則

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

詳解Python中Pyyaml模塊的使用

2、引用

& 和 * 用于引用

name: &name SKPtester: *name

運(yùn)行結(jié)果:

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

3、強(qiáng)制轉(zhuǎn)換

用 !! 實(shí)現(xiàn)

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

運(yùn)行結(jié)果:

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

4、分段

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

舉例見上述load_all()示例

四、python對(duì)象生成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)'''結(jié)果school: zhustudents:- a- b'''

2、使用ruamel模塊中的yaml方法生成標(biāo)準(zhǔn)的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)'''結(jié)果school: zhustudents:- a- b'''

使用ruamel模塊中的yaml方法讀取yaml文檔(用法與單獨(dú)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)

到此這篇關(guān)于Python中Pyyaml模塊的使用的文章就介紹到這了,更多相關(guān)Python中Pyyaml模塊內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久国产中文字幕| av资源中文在线天堂| 久久久蜜桃一区二区人| 中文字幕在线看片| 久久一区二区三区喷水| 日韩不卡在线| 欧美亚洲精品在线| 五月天激情综合网| 日韩专区欧美专区| 国产伦一区二区三区| 老司机精品视频网| 日韩精品水蜜桃| 日韩在线一区二区| 国产精品久久久久久模特| 日韩不卡一区| 国产精品7m凸凹视频分类| 视频在线观看91| 国产精品天天看天天狠| 福利在线免费视频| 国产亚洲精品v| 日本中文字幕不卡| 久久精品五月| 亚洲一区二区毛片| 久久av中文| 狠狠久久婷婷| 欧美极品一区二区三区| 欧美成人午夜| 国产精品毛片视频| 国户精品久久久久久久久久久不卡| 蜜臀av亚洲一区中文字幕| 另类小说一区二区三区| 欧美搞黄网站| 久久不见久久见免费视频7| 亚洲高清不卡| 国产精品大片免费观看| 免费av一区| 久久不见久久见国语| 国产亚洲精品v| 美女久久久久久| 一区二区高清| 国内精品福利| 国产第一亚洲| 久久精品999| 亚洲少妇诱惑| 欧美亚洲国产激情| 精品国产亚洲一区二区三区大结局| 欧美资源在线| 免费av一区| 中文字幕色婷婷在线视频| 国产伦理一区| 亚洲最新av| 日韩视频免费| 欧美日韩一区二区三区视频播放| 久久精品999| 欧美专区一区| 日本午夜精品| 天堂va欧美ⅴa亚洲va一国产| 亚洲激情中文| 在线国产一区二区| 国产专区一区| 国产韩日影视精品| 欧美不卡在线| 国产精品婷婷| 亚洲天堂av资源在线观看| 亚洲综合三区| 亚洲综合专区| 视频在线观看国产精品| 综合一区av| 久久国产乱子精品免费女| 91福利精品在线观看| 国产一区 二区| 精品女同一区二区三区在线观看| 九九九精品视频| 亚洲综合电影| 美女久久久久| 日韩精品视频网站| 国产劲爆久久| 日本不良网站在线观看| 91精品91| 久久国内精品自在自线400部| 精品日韩一区| 神马久久午夜| 丝袜美腿高跟呻吟高潮一区| 日本免费一区二区视频| 欧美极品中文字幕| 蜜桃成人av| 91欧美日韩在线| 欧美国产另类| 国产v综合v| 视频一区视频二区在线观看| 色婷婷狠狠五月综合天色拍| 天堂va蜜桃一区二区三区| 香蕉成人av| 亚洲日本网址| 国产一区丝袜| 国产精品久久久一区二区| 国产亚洲在线| 国产日产一区| 亚洲欧美日本国产专区一区| 蜜桃av一区二区三区电影| 日韩精选在线| 天使萌一区二区三区免费观看| 天堂√中文最新版在线| 国产精品xxx在线观看| 日韩精品一区二区三区中文字幕| 好吊一区二区三区| 婷婷成人在线| 久久中文视频| 美女网站一区| 日韩一级欧洲| 亚洲一区二区小说| 婷婷成人在线| 亚洲精品网址| 亚洲欧美视频一区二区三区| 99国产精品视频免费观看一公开 | 亚洲91视频| 91精品二区| 日韩专区一卡二卡| 欧美日韩精品一区二区三区在线观看| 欧美日韩一区二区国产| 欧美精品成人| 美女网站视频一区| 99riav1国产精品视频| 偷拍欧美精品| 日本免费一区二区视频| 日韩中出av| 国产精品白丝久久av网站| 精品三级久久久| 99久久九九| 中文字幕一区日韩精品| 日本a口亚洲| 久久精品国产福利| 亚洲性色av| 亚洲在线成人| 国产剧情在线观看一区| 97精品国产| 老司机久久99久久精品播放免费| 日本a口亚洲| 另类综合日韩欧美亚洲| 激情六月综合| 国产欧美一区二区三区米奇| 岛国av在线网站| 一区二区精品| 日韩精品专区| 欧美日韩一区自拍| 久久一区二区中文字幕| 国产精品一区二区美女视频免费看 | 精品视频在线你懂得| 日韩亚洲国产欧美| 久久免费视频66| 日韩一区二区三区精品| av高清一区| 欧美日韩精品一区二区三区在线观看| 桃色一区二区| 免费日韩一区二区三区| 中文一区一区三区免费在线观 | 亚洲精品免费观看| 欧美亚洲日本精品| 国产欧美日韩综合一区在线播放| 2023国产精品久久久精品双| 精品精品99| 国产精品资源| 日韩激情av在线| 深夜福利一区| 在线观看亚洲精品福利片| 欧美激情另类| 久久av影视| 日本a级不卡| 一区二区三区四区日韩| 亚洲香蕉网站| 日本蜜桃在线观看视频| 国产乱人伦精品一区| 人人爽香蕉精品| 天堂成人免费av电影一区| 午夜国产精品视频| 欧美在线资源| 欧洲毛片在线视频免费观看| 秋霞影院一区二区三区| 日韩精品1区| 欧美sss在线视频| 久久久久午夜电影| 久久中文视频| 国产精品毛片| 一级欧美视频| 日本精品在线播放| 欧美精品二区| 国产精品tv| 麻豆一区二区三区| 国产综合色区在线观看| 亚洲精品一二三区区别| 美女久久一区| 亚洲精品国产精品粉嫩| 免费视频国产一区| 伊人久久一区| 国产精品成人自拍| 国产精品99免费看| 日韩中文字幕一区二区高清99| 久久精品一区二区国产| 亚洲a在线视频| 一本一道久久a久久|