欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python3操作YAML文件格式方法解析

 更新時(shí)間:2020年04月10日 10:16:12   作者:臨淵  
這篇文章主要介紹了Python3操作YAML文件格式方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

數(shù)據(jù)及配置文件之爭(zhēng)

數(shù)據(jù)及文件通常有三種類型:

  • 配置文件型:如ini,conf,properties文件,適合存儲(chǔ)簡(jiǎn)單變量和配置項(xiàng),最多支持兩層,不適合存儲(chǔ)多層嵌套數(shù)據(jù)
  • 表格矩陣型:如csv,excel等,適合于存儲(chǔ)大量同類數(shù)據(jù),不適合存儲(chǔ)層級(jí)結(jié)構(gòu)的數(shù)據(jù)
  • 多層嵌套型:如XML,HTMl,JSON、YAML,TOML等,適合存儲(chǔ)單條或少數(shù)多層嵌套數(shù)據(jù),不適合存儲(chǔ)大量數(shù)據(jù)

YAML兼容JSON格式,簡(jiǎn)潔,強(qiáng)大,靈活,可以很方便的構(gòu)造層級(jí)數(shù)據(jù)并快速轉(zhuǎn)為Python中的字典。

YAML簡(jiǎn)介

YAML(YAML Ain't Markup Language)即一種反標(biāo)記(XML)語言。強(qiáng)調(diào)數(shù)據(jù)為中心,而非標(biāo)記。YAML大小寫敏感,使用縮進(jìn)代表層級(jí)關(guān)系。

YAML中支持對(duì)象Object(對(duì)應(yīng)Python中的字典), 數(shù)組Array(對(duì)應(yīng)Python中的列表)以及常量(字符串、數(shù)字(int/float),true/false/null)。

相比于JSON格式,YAML免除了雙引號(hào),逗號(hào),大括號(hào),中括號(hào)等,(當(dāng)然也支持原始的JSON格式),并且支持注釋,類型轉(zhuǎn)換,跨行,錨點(diǎn),引用及插入等等。

基本格式

  • 對(duì)象:使用key: value表示,冒號(hào)后面有一個(gè)空格,也可以是使用{key: value}(flow流格式)或{"key": "value"}表示
  • 數(shù)組:使用- value表示,-后面有一個(gè)空格,每項(xiàng)一行,也可以使用[value1,value2,value3,...] (flow流格式)或["value1", "value2", "value3", ...]
  • 字符串:abc或"abc"
  • 數(shù)字:123或123.45
  • true/false:true/false,TRUE/FALSE,True/False或on/off, ON/OFF, On/Off
  • null: null,NULL, Null或~

示例文件demo.yaml:

# 注釋:示例yaml文件
name: Cactus
age: 18
skills: 
 -
  - Python
  - 3
 -
  - Java
  - 5
has_blog: true
gf: ~

相當(dāng)于以下JSON格式

{
 "name": "Cactus",
 "age": 18,
 "skills": [
  [
   "Python",
   3
  ],
  [
   "Java",
   5
  ]
 ],
 "has_blog": true,
 "gf": null
}

類型轉(zhuǎn)換

使用!!str, !!float等可以將默認(rèn)類型轉(zhuǎn)為指定類型,如

  • - !!float 3
  • - !!str 4
  • - !!str true

對(duì)應(yīng)JSON格式

[
3.0,
"4",
"true"
]

多行文本及拼接

  • | 保留多行文本(保留換行符)
  • > 將多行拼接為一行

示例:

a: |

喜歡你

b: >

不喜歡你

才怪對(duì)應(yīng)JSON格式

{
"a": "我\n喜歡你\n",
"b": "我 不喜歡你 才怪"
}

錨點(diǎn),引用及插入

在-或:后 加上&錨點(diǎn)名為當(dāng)前字段建立錨點(diǎn),下面可使用*錨點(diǎn)名引用錨點(diǎn),或使用<<: *錨點(diǎn)名直接將錨點(diǎn)數(shù)據(jù)插入到當(dāng)前的數(shù)據(jù)中,示例如下:

users:
 - &zs
  name: 張三
  password: !!str 123456
 - &ls
  name: 李四
  password: abcdefg

case1:
 login: *zs

case2:
 user:
  <<: *ls
  age: 20

對(duì)應(yīng)JSON格式:

{
 "users": [
  {
   "name": "張三",
   "password": "123456"
  },
  {
   "name": "李四",
   "password": "abcdefg"
  }
 ],
 "case1": {
  "login": {
   "name": "張三",
   "password": "123456"
  }
 },
 "case2": {
  "user": {
   "name": "李四",
   "password": "abcdefg",
   "age": 20
  }
 }
}

Python操作YAML文件及字符串

需要安裝pyyaml, pip install pyyaml

和JSON文件類似,yaml也提供load和dump兩種方法。

  • yaml.load()或yaml.safe_load(YAML字符串或文件句柄):yaml -> 字典,如yaml中有中文,需要使用 字符串.encode('utf-8')或打開文件時(shí)指定encoding='utf-8'
  • yaml.dump(字典):默認(rèn)為flow流格式,即字典{b': {'c': 3, 'd': 4}},會(huì)被轉(zhuǎn)為b: {c: 3, d: 4}形式,可以使用default_flow_style=False關(guān)閉流模式

由于yaml.load()支持原生Python對(duì)象,不安全,建議使用yaml.safe_load()

示例1:yaml字符串 -> 字典

import yaml
yaml_str = '''
name: Cactus
age: 18
skills: 
 -
  - Python
  - 3
 -
  - Java
  - 5
has_blog: true
gf: ~
'''
print(yaml.safe_load(yaml_str)) 

打印結(jié)果:

{'name': 'Cactus', 'age': 18, 'skills': [['Python', 3], ['Java', 5]], 'has_blog': True, 'gf': None}

如果有中文,可以使用yaml.load(yaml_str.encoding('utf-8))

示例2:yaml文件 -> 字典

import yaml
with open('demo.yaml', encoding='utf-8') as f:  # demo.yaml內(nèi)容同上例yaml字符串 
  print(yaml.safe_load(f))

打印結(jié)果同上例。

字典 -> yaml字符串或文件

import yaml
dict_var = {'name': 'Cactus', 'age': 18, 'skills': [['Python', 3], ['Java', 5]], 'has_blog': True, 'gf': None}
print(yaml.dump(dict_var,)) # 轉(zhuǎn)為字符串,使用默認(rèn)flow流格式
with open('demo5.yaml', 'w', encoding='utf-8') as f:
  yaml.dump(dict_var, f, default_flow_style=False) # 寫入文件,不是用flow流格式

打印內(nèi)容:

age: 18
gf: null
has_blog: true
name: Cactus
skills:
- [Python, 3]
- [Java, 5]

1demo5.yaml1文件內(nèi)容:

age: 18
gf: null
has_blog: true
name: Cactus
skills:
- - Python
- 3
- - Java
- 5

更多操作可參考pyyaml官方文檔:https://pyyaml.org/wiki/PyYAMLDocumentation

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 簡(jiǎn)單了解python列表和元組的區(qū)別

    簡(jiǎn)單了解python列表和元組的區(qū)別

    這篇文章主要介紹了簡(jiǎn)單了解python列表和元組的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Jupyter Notebook 安裝配置與使用詳解

    Jupyter Notebook 安裝配置與使用詳解

    這篇文章主要介紹了Jupyter Notebook 安裝配置與使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Python使用numpy模塊創(chuàng)建數(shù)組操作示例

    Python使用numpy模塊創(chuàng)建數(shù)組操作示例

    這篇文章主要介紹了Python使用numpy模塊創(chuàng)建數(shù)組操作,結(jié)合實(shí)例形式分析了Python使用numpy模塊實(shí)現(xiàn)數(shù)組的創(chuàng)建、賦值、修改、打印等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-06-06
  • python簡(jiǎn)單讀取大文件的方法

    python簡(jiǎn)單讀取大文件的方法

    這篇文章主要介紹了python簡(jiǎn)單讀取大文件的方法,通過非常簡(jiǎn)單的方式實(shí)現(xiàn)對(duì)GB級(jí)別大文件的讀取功能,并給出了外文參考站點(diǎn)stackoverflow的參考地址,需要的朋友可以參考下
    2016-07-07
  • 如何基于Python爬蟲爬取美團(tuán)酒店信息

    如何基于Python爬蟲爬取美團(tuán)酒店信息

    這篇文章主要介紹了如何基于Python爬蟲爬取美團(tuán)酒店信息,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 詳解Python魔法方法之描述符類

    詳解Python魔法方法之描述符類

    今天帶大家復(fù)習(xí)一下python描述符類的相關(guān)知識(shí),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • class類在python中獲取金融數(shù)據(jù)的實(shí)例方法

    class類在python中獲取金融數(shù)據(jù)的實(shí)例方法

    在本篇文章里小編給大家整理了關(guān)于class類怎樣在python中獲取金融數(shù)據(jù)的相關(guān)內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2020-12-12
  • 如何使Python中的print()語句運(yùn)行結(jié)果不換行

    如何使Python中的print()語句運(yùn)行結(jié)果不換行

    這篇文章主要介紹了如何使Python中的print()顯示當(dāng)前語句后不換行,print() 是一個(gè)常用函數(shù),但是每次,print()語句顯示后都會(huì)換行,本問我們就來節(jié)日如何使print()顯示當(dāng)前語句后不換行,需要的朋友可以參考一下
    2022-03-03
  • Pycharm Plugins加載失敗問題解決方案

    Pycharm Plugins加載失敗問題解決方案

    這篇文章主要介紹了Pycharm Plugins加載失敗問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • python 網(wǎng)頁解析器掌握第三方 lxml 擴(kuò)展庫與 xpath 的使用方法

    python 網(wǎng)頁解析器掌握第三方 lxml 擴(kuò)展庫與 xpath 的使用方法

    這篇文章主要介紹了python 網(wǎng)頁解析器掌握第三方 lxml 擴(kuò)展庫與 xpath 的使用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04

最新評(píng)論