最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Python中Pyyaml模塊的使用

 更新時間:2020年10月08日 10:49:18   作者:蜀山客e  
這篇文章主要介紹了Python中Pyyaml模塊的使用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、YAML是什么

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

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

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

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

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

二、PyYaml的簡單使用

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

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

import yaml

yaml_str = """
name: 一條大河
age: 1956
job: Singer
"""

y = yaml.load(yaml_str, Loader=yaml.SafeLoader)
print(y)

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

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

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

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

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

---
name: qiyu
age: 20歲
---
name: qingqing
age: 19歲

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

import yaml

with 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()示例:將一個python對象生成為yaml文檔

import yaml

json_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: 1956
job:
- Singer
- Dancer
name: "一條大河"

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

import yaml

json_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:

在這里插入圖片描述

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

import yaml

obj1 = {"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:

在這里插入圖片描述

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

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

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

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

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

1、大小寫敏感

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

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

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

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

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

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

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

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

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

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

1、對象:鍵值對的集合

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

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

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

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

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

操作代碼:

import yaml
import datetime
import pytz

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

控制臺輸出:

在這里插入圖片描述

其他語法規(guī)則

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

在這里插入圖片描述

2、引用

& 和 * 用于引用

name: &name SKP
tester: *name

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

{'name': 'SKP', 'tester': 'SKP'}

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

用 !! 實現(xiàn)

str: !!str 3.14
int: !!int "123"

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

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

4、分段

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

舉例見上述load_all()示例

四、python對象生成yaml文檔

1、yaml.dump()方法

import yaml
import os

def 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: zhu
students:
- a
- b
"""

2、使用ruamel模塊中的yaml方法生成標(biāo)準(zhǔn)的yaml文檔

import os
from ruamel import yaml   # pip3 install ruamel.yaml

def 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: zhu
students:
- a
- b
"""

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

import os
from ruamel import yaml

def 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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 10 行 Python 代碼教你自動發(fā)送短信(不想回復(fù)工作郵件妙招)

    10 行 Python 代碼教你自動發(fā)送短信(不想回復(fù)工作郵件妙招)

    這篇文章主要介紹了10 行 Python 代碼教你自動發(fā)送短信(不想回復(fù)工作郵件妙招),目前在國內(nèi)通過手機(jī)短信保障信息安全是比較常見的,具體實例代碼大家跟隨小編一起通過本文學(xué)習(xí)吧
    2018-10-10
  • python提取word文件中的所有圖片

    python提取word文件中的所有圖片

    辦公中,偶爾會碰到一種情況,需要提取word文檔中的圖片,決定寫這樣一款工具自動提取圖片,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Python+NumPy繪制常見曲線的方法詳解

    Python+NumPy繪制常見曲線的方法詳解

    NumPy(Numerical Python)是Python的一種開源的數(shù)值計算擴(kuò)展。本文將利用NumPy庫繪制利薩茹曲線、計算斐波那契數(shù)列、方波和鋸齒波和三角波,需要的可以參考一下
    2022-06-06
  • pycharm引入其他目錄的包報錯,import報錯的解決

    pycharm引入其他目錄的包報錯,import報錯的解決

    這篇文章主要介紹了pycharm引入其他目錄的包報錯,import報錯的解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • np.newaxis 實現(xiàn)為 numpy.ndarray(多維數(shù)組)增加一個軸

    np.newaxis 實現(xiàn)為 numpy.ndarray(多維數(shù)組)增加一個軸

    今天小編就為大家分享一篇np.newaxis 實現(xiàn)為 numpy.ndarray(多維數(shù)組)增加一個軸,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • pytorch?ssim計算詳細(xì)代碼例子

    pytorch?ssim計算詳細(xì)代碼例子

    這篇文章主要給大家介紹了關(guān)于pytorch?ssim計算的相關(guān)資料,結(jié)構(gòu)相似性(SSIM)是一種測量兩幅圖像的相似度的方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • python實現(xiàn)CTC以及案例講解

    python實現(xiàn)CTC以及案例講解

    這篇文章主要介紹了python實現(xiàn)CTC以及案例講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Python趣味挑戰(zhàn)之turtle庫繪畫飄落的銀杏樹

    Python趣味挑戰(zhàn)之turtle庫繪畫飄落的銀杏樹

    銀杏還是和恐龍同時代的植物,被稱為活化石,適應(yīng)能力強(qiáng),生長期漫長,壽命可達(dá)千年.因此,銀杏是長壽的代表和象征,接下來用Python的turtle庫來繪畫銀杏樹唯美的一幕,需要的朋友可以參考下
    2021-05-05
  • 配置jupyter notebook全步驟,更改默認(rèn)路徑,jupyter不是問題

    配置jupyter notebook全步驟,更改默認(rèn)路徑,jupyter不是問題

    這篇文章主要介紹了配置jupyter notebook全步驟,更改默認(rèn)路徑,jupyter不是問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 學(xué)好python基本數(shù)據(jù)類型

    學(xué)好python基本數(shù)據(jù)類型

    這篇文章主要介紹了學(xué)好python基本數(shù)據(jù)類型,學(xué)習(xí)python基本數(shù)據(jù)類型我們需要了解基本數(shù)據(jù)類型有數(shù)字int、布爾值bool、字符串str、列表list、元組tuple、字典dict等,其中包括他們的基本用法和其常用的方法,下面來看看文章的具體介紹吧
    2021-12-12

最新評論

安溪县| 淳化县| 突泉县| 桦川县| 曲沃县| 抚宁县| 东安县| 灵璧县| 岑溪市| 荆门市| 原平市| 江安县| 思茅市| 改则县| 图木舒克市| 瓮安县| 策勒县| 封丘县| 安顺市| 高安市| 望江县| 海宁市| 逊克县| 德钦县| 西乡县| 阿坝| 衢州市| 将乐县| 南开区| 贡嘎县| 大余县| 武定县| 南京市| 海口市| 新民市| 富裕县| 古丈县| 石林| 道孚县| 山西省| 宾川县|