亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python YAML文件的讀寫(xiě)操作詳解

 更新時(shí)間:2022年08月17日 11:37:39   作者:alwaysrun  
這篇文章主要介紹了Python讀寫(xiě)yaml文件,yaml 是專(zhuān)門(mén)用來(lái)寫(xiě)配置文件的語(yǔ)言,非常簡(jiǎn)潔和強(qiáng)大,之前用ini也能寫(xiě)配置文件,有點(diǎn)類(lèi)似于json格式,下面關(guān)于Python讀寫(xiě)yaml文件的詳細(xì)資料,需要的小伙伴可以參考一下

YAML是一種數(shù)據(jù)序列化格式,方便人類(lèi)閱讀,且容易和腳本語(yǔ)言交互。常用于配置文件,也用于數(shù)據(jù)存儲(chǔ)或傳輸。

YAML格式

YAML三種基本數(shù)據(jù)類(lèi)型:

1.標(biāo)量:如字符串、整數(shù)和浮點(diǎn)數(shù)、日期

  • 布爾值:“true”、“True”、“TRUE”、“yes”、“Yes"和"YES”,“false”、“False”、“FALSE”、“no”、“No"和"NO”
  • 空:null、Null、~或不指定值;

2.數(shù)組:使用前導(dǎo)符號(hào)-表示,且符號(hào)與值間要有空格;

3.對(duì)象:鍵值對(duì)集合;用冒號(hào)+空格: 分割;

YAML文件

文件基本規(guī)則:

區(qū)分大小寫(xiě);

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

  • 縮進(jìn)要用空格(非Tab);
  • 相同層級(jí)元素要左對(duì)齊;

字符串不需要使用引號(hào)括起,但有特殊字符串(如空格、冒號(hào)等)時(shí)必須使用引號(hào);

使用#注釋?zhuān)?/p>

一個(gè)文件中可包含多份YAML文檔:

---(即三個(gè)中劃線)表示一份文檔的開(kāi)始;

[可選]用...(即三個(gè)小數(shù)點(diǎn))表示一份文檔的結(jié)束;

---
# 這是第一份文檔
one: 1
# 其他內(nèi)容...
...

---
# 這是第二份文檔
two: 2
# 其他內(nèi)容...

YAML操作

Python中有兩個(gè)YAML模塊:PyYAML和ruamel.yaml(pip3 install pyyaml,pip3 install ruamel.yaml)。

讀取

通過(guò)load函數(shù)可方便加載文檔內(nèi)容,返回的內(nèi)容可能是字典、列表或空:

import yaml
def readYaml(file):  # -> Union[dict, list, None]:
    with open(file, 'r', encoding='utf-8') as f:
        return yaml.load(f, yaml.Loader)

若文件中有多個(gè)文檔,需要使用load_all來(lái)加載;此時(shí)返回的是一個(gè)生成器,需要一次獲取每個(gè)文檔:

def readAllDoc(file) -> list:
    with open(file, 'r', encoding='utf-8') as f:
        docs = yaml.load_all(f, yaml.Loader)
        # return [d for d in docs]
        return list(docs)

存儲(chǔ)

yaml.dump()方法不會(huì)將列表或字典數(shù)據(jù)進(jìn)行轉(zhuǎn)化yaml標(biāo)準(zhǔn)模式。需要通過(guò)ruamel.yaml來(lái)生成標(biāo)準(zhǔn)的yaml文檔。

import ruamel.yaml
def createYaml(file, data: dict):
    with open(file, 'w', encoding='utf-8') as f:
        writer = ruamel.yaml.YAML()
        writer.indent(mapping=2, sequence=4, offset=2)
        writer.dump(data, f)

通過(guò)dump_all可把數(shù)組中的每個(gè)元素序列化為一個(gè)文檔:

def createAllDoc(file, data: list):
    with open(file, 'w', encoding='utf-8') as f:
        writer = ruamel.yaml.YAML()
        writer.indent(mapping=2, sequence=4, offset=2)
        writer.dump_all(data, f)

[{'name': 'Mike', 'age': 12}, {'name': 'luce', 'age': 15}]序列化。

dump會(huì)生成如下包含數(shù)組元素的yaml文件:

  - name: Mike
    age: 12
  - name: luce
    age: 15

dump_all會(huì)生成如下yaml文件(包含兩個(gè)文檔):

name: Mike
age: 12
---
name: luce
age: 15

示例

yaml讀取后為列表或字典。

轉(zhuǎn)字典

讀取的內(nèi)容為一個(gè)字典:

name: mike
age: 25
score: 80.5

返回的值為:

{
  "name": "mike",
  "age": 25,
  "score": 80.5
}

獲取里面值,先判斷是否存在,再讀?。?/p>

if 'name' in data:
  print(data['name'])

轉(zhuǎn)列表

讀取內(nèi)容為一個(gè)列表:

- name: mike
  age: 24
- name: tom
  age: 30

返回的值為:

[
  {
    "name": "mike",
    "age": 24
  },
  {
    "name": "tom",
    "age": 30
  }
]

到此這篇關(guān)于Python YAML文件的讀寫(xiě)操作詳解的文章就介紹到這了,更多相關(guān)Python YAML文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論