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

Python使用PyYAML庫讀寫yaml文件的方法

 更新時(shí)間:2022年04月06日 15:25:55   作者:給你一頁白紙  
這篇文章主要介紹了Python使用PyYAML庫讀寫yaml文件的方法,包括YAML基本概念介紹及YAML語法知識(shí),結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下

Python中yaml文件的讀寫(使用PyYAML庫)。最近在搭建自動(dòng)化測(cè)試項(xiàng)目過程中經(jīng)常遇到y(tǒng)aml文件的讀寫,為了方便后續(xù)使用,決定記下筆記。

最近在搭建自動(dòng)化測(cè)試項(xiàng)目過程中經(jīng)常遇到y(tǒng)aml文件的讀寫,為了方便后續(xù)使用,決定記下筆記。

一,YAML 簡(jiǎn)介

YAML,Yet Another Markup Language的簡(jiǎn)寫,通常用來編寫項(xiàng)目配置,也可用于數(shù)據(jù)存儲(chǔ),相比conf等配置文件要更簡(jiǎn)潔。

二,YAML 語法

  • 支持的數(shù)據(jù)類型:

字典、列表、字符串、布爾值、整數(shù)、浮點(diǎn)數(shù)、Null、時(shí)間等

  • 基本語法規(guī)則:

1、大小寫敏感

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

3、相同層級(jí)的元素左側(cè)對(duì)齊

4、鍵值對(duì)用冒號(hào) “:” 結(jié)構(gòu)表示,冒號(hào)與值之間需用空格分隔

5、數(shù)組前加有 “-” 符號(hào),符號(hào)與值之間需用空格分隔

6、None值可用null 和 ~ 表示

7、多組數(shù)據(jù)之間使用3橫杠---分割

8、# 表示注釋,但不能在一段代碼的行末尾加 #注釋,否則會(huì)報(bào)錯(cuò)

注意:網(wǎng)上查找到各種博客都提到y(tǒng)aml縮進(jìn)時(shí)不能使用tab鍵,但我在pycharm編輯器里實(shí)際使用時(shí)是可以使用tab鍵進(jìn)行縮進(jìn)的,讀寫時(shí)并沒有報(bào)錯(cuò)!

三,安裝第三方y(tǒng)aml文件處理庫PyYAML

python沒有自帶的處理yaml文件的庫,需要下載第三方庫PyYAML 或 ruamel.yaml ,這里我們安裝PyYAML。

pip install pyyaml
# 下載速度慢的話加上清華鏡像源
pip install pyyaml -i https://pypi.tuna.tsinghua.edu.cn/simple

四,讀取yaml文件

1,從yaml中讀取字典

yaml中的字典格式如下:

# yaml文件,文件名為yamlData

os: Android
osVersion: 10
account:
  username: xiaoqq
  password: 123456
deviceName: null
appPackage: ~
bool1: True

讀取字典代碼:

# @author: 給你一頁白紙
import yaml
with open('./yamlData.yml', 'r', encoding='utf-8') as f:
    result = yaml.load(f.read(), Loader=yaml.FullLoader)
print(result, type(result))
print(result['os'], type(result['os']))
print(result['osVersion'], type(result['osVersion']))
print(result['account'], type(result['account']))
print(result['account']['username'])
print(result['deviceName'])
print(result['appPackage'])
print(result['bool1'], type(result['bool1']))

讀取結(jié)果:

{'os': 'Android', 'osVersion': 10, 'account': {'username': 'xiaoqq', 'password': 123456}, 'deviceName': None, 'appPackage': None} <class 'dict'>
Android <class 'str'>
10 <class 'int'>
{'username': 'xiaoqq', 'password': 123456} <class 'dict'>
xiaoqq
None
None
True <class 'bool'>

從讀取結(jié)果可以看出:

1,讀取出來的數(shù)據(jù)不會(huì)改變?cè)瓟?shù)據(jù)類型,即yaml里是什么數(shù)據(jù)類型,讀出來就是什么類型。

2,Loader=yaml.FullLoader參數(shù)不寫的話對(duì)結(jié)果不會(huì)有影響,但運(yùn)行時(shí)會(huì)出現(xiàn)警告信息。

3,yaml.load(f.read(), Loader=yaml.FullLoader)也可以寫成yaml.load(f, Loader=yaml.FullLoader),讀取出來的結(jié)果相同。

2,從yaml中讀取list

yaml中l(wèi)ist格式:數(shù)據(jù)前加'-' 并使用空格與數(shù)據(jù)間隔開,如下:

# yaml文件名yamlData

- Android
- 10
- null
- ~
- True

讀取list代碼:

# @author: 給你一頁白紙
import yaml
with open('./yamlData.yml', 'r', encoding='utf-8') as f:
    result = yaml.load(f.read(), Loader=yaml.FullLoader)
print(result, type(result))

讀取結(jié)果:

['Android', 10, None, None, True] <class 'list'>

3,從yaml中讀取元組

yaml中存儲(chǔ)元組格式:yaml中使用!!對(duì)數(shù)據(jù)類型進(jìn)行轉(zhuǎn)換,yaml中tuple由list轉(zhuǎn)換而來。如下:

# yaml文件名yamlData

!!python/tuple
- Android
- 10
- null
- ~
- True

讀取元組代碼:

# @author: 給你一頁白紙
import yaml
with open('./yamlData.yml', 'r', encoding='utf-8') as f:
    result = yaml.load(f.read(), Loader=yaml.FullLoader)
print(result, type(result))

讀取結(jié)果:

('Android', 10, None, None, True) <class 'tuple'>

在實(shí)際使用中,很多的時(shí)候往往是多種類型嵌套的數(shù)據(jù)。如下yaml數(shù)據(jù)

# yaml文件名yamlData
os: Android
osVersion: 10
account:
  - username1: xiaoqq
  - password1: 123456
  - username2: Lilei
  - password2: 888888
deviceName: null
appPackage: ~
bool1: True

讀取結(jié)果:

{'os': 'Android', 'osVersion': 10, 'account': [{'username1': 'xiaoqq'}, {'password1': 123456}, {'username2': 'Lilei'}, {'password2': 888888}], 'deviceName': None, 'appPackage': None, 'bool1': True}

4,從yaml中讀取多組數(shù)據(jù)

yaml多組數(shù)據(jù)時(shí),每組數(shù)據(jù)之間需要用3橫杠分隔'---',如下:

os: Android
osVersion: 10
account1:
  username1: xiaoqq
  password1: 123456
---
os: ios
osVersion: 12
account1:
  username2: Lilei
  password2: 888888

從yaml中讀取多組數(shù)據(jù)時(shí)需要使用yaml.load_all()方法,返回結(jié)果為一個(gè)生成器,需要使用for循環(huán)語句獲取每組數(shù)據(jù)。代碼如下:

# @author: 給你一頁白紙
import yaml
with open('./yamlData.yml', 'r', encoding='utf-8') as f:
    result = yaml.load_all(f.read(), Loader=yaml.FullLoader)
    print(result, type(result))
    for i in result:
        print(i)

讀取結(jié)果:

<generator object load_all at 0x000001F78EBD5B48> <class 'generator'>
{'os': 'Android', 'osVersion': 10, 'account1': {'username1': 'xiaoqq', 'password1': 123456}}
{'os': 'ios', 'osVersion': 12, 'account1': {'username2': 'Lilei', 'password2': 888888}}

五,寫入yaml文件

1,單組數(shù)據(jù)寫入yaml文件

使用yaml.dump()方法,加入allow_unicode=True參數(shù)防止寫入的中文亂碼,如下:

# @author: 給你一頁白紙
import yaml
apiData = {
   "page": 1,
   "msg": "地址",
   "data": [{
      "id": 1,
      "name": "學(xué)校"
   }, {
      "id": 2,
      "name": "公寓"
      "id": 3,
      "name": "流動(dòng)人口社區(qū)"
   }],
}
with open('./writeYamlData.yml', 'w', encoding='utf-8') as f:
   yaml.dump(data=apiData, stream=f, allow_unicode=True)

寫入結(jié)果:

data:
- id: 1
  name: 學(xué)校
- id: 2
  name: 公寓
- id: 3
  name: 流動(dòng)人口社區(qū)
msg: 地址
page: 1

2,多組數(shù)據(jù)寫入yaml文件

使用yaml.dump_all()方法,如下:

# @author: 給你一頁白紙
import yaml
apiData1 = {
   "page": 1,
   "msg": "地址",
   "data": [{
      "id": 1,
      "name": "學(xué)校"
   }, {
      "id": 2,
      "name": "公寓"
      "id": 3,
      "name": "流動(dòng)人口社區(qū)"
   }],
}
apiData2 = {
   "page": 2,
      "name": "酒店"
      "name": "醫(yī)院"
      "name": "養(yǎng)老院"
with open('./writeYamlData.yml', 'w', encoding='utf-8') as f:
   yaml.dump_all(documents=[apiData1, apiData2], stream=f, allow_unicode=True)

寫入結(jié)果:

data:
- id: 1
  name: 學(xué)校
- id: 2
  name: 公寓
- id: 3
  name: 流動(dòng)人口社區(qū)
msg: 地址
page: 1
---
data:
- id: 1
  name: 酒店
- id: 2
  name: 醫(yī)院
- id: 3
  name: 養(yǎng)老院
msg: 地址
page: 2

在Python中除了PyYAML庫之外,還有ruamel.yaml庫也可以對(duì)yaml文件進(jìn)行讀寫操作,后續(xù)再記筆記進(jìn)行介紹。

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

相關(guān)文章

  • python列表,字典,元組簡(jiǎn)單用法示例

    python列表,字典,元組簡(jiǎn)單用法示例

    這篇文章主要介紹了python列表,字典,元組簡(jiǎn)單用法,結(jié)合實(shí)例形式分析了Python列表,字典,元組的功能及相關(guān)函數(shù)使用技巧,需要的朋友可以參考下
    2019-07-07
  • Jupyter notebook無法導(dǎo)入第三方模塊的解決方式

    Jupyter notebook無法導(dǎo)入第三方模塊的解決方式

    這篇文章主要介紹了Jupyter notebook無法導(dǎo)入第三方模塊的解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python實(shí)現(xiàn)Excel數(shù)據(jù)過濾

    Python實(shí)現(xiàn)Excel數(shù)據(jù)過濾

    本文將以車牌數(shù)據(jù)為示例,為大家詳細(xì)介紹一下如何使用Python實(shí)現(xiàn)Excel數(shù)據(jù)過濾功能,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-10-10
  • 如何使用Python高效復(fù)制Excel?行、列、單元格

    如何使用Python高效復(fù)制Excel?行、列、單元格

    在數(shù)據(jù)分析和自動(dòng)化中,Python是一個(gè)極為強(qiáng)大的工具,尤其是在處理Excel文件時(shí),Python能夠讓我們的工作變得更加高效,這篇文章主要介紹了如何使用Python高效復(fù)制Excel?行、列、單元格的相關(guān)資料,需要的朋友可以參考下
    2025-11-11
  • 一篇文章帶你了解python標(biāo)準(zhǔn)庫--os模塊

    一篇文章帶你了解python標(biāo)準(zhǔn)庫--os模塊

    在本篇內(nèi)容里小編給大家整理的是關(guān)于Python中os模塊及用法相關(guān)知識(shí)點(diǎn),有興趣的朋友們可以學(xué)習(xí)下,希望能給你帶來幫助
    2021-08-08
  • Python萬字深入內(nèi)存管理講解

    Python萬字深入內(nèi)存管理講解

    內(nèi)存管理是指在程序的運(yùn)行過程中,分配內(nèi)容和回收內(nèi)存的過程。如果只分配,不回收,電腦上那點(diǎn)內(nèi)存很快就被用光。幸運(yùn)的是,Python和Java等高級(jí)語言會(huì)自動(dòng)管理內(nèi)存的分配和回收
    2022-07-07
  • 利用Python實(shí)現(xiàn)自動(dòng)生成小學(xué)生計(jì)算題

    利用Python實(shí)現(xiàn)自動(dòng)生成小學(xué)生計(jì)算題

    過年期間發(fā)現(xiàn)小外甥已經(jīng)上小學(xué)了,我姐說老師今天給他們布置了寒假作業(yè):每天堅(jiān)持做乘法和加減法混合運(yùn)算。這我必須幫幫忙,用Python寫了一段自動(dòng)生成小學(xué)生計(jì)算題的代碼,希望外甥不要太感謝我
    2023-02-02
  • python字符串編碼識(shí)別模塊chardet簡(jiǎn)單應(yīng)用

    python字符串編碼識(shí)別模塊chardet簡(jiǎn)單應(yīng)用

    有時(shí)候需要先檢測(cè)一個(gè)文件的編碼,然后將其轉(zhuǎn)化為另一種編碼。這時(shí)候就會(huì)用到chardet(chardet是python的一個(gè)第三方庫,是非常優(yōu)秀的編碼識(shí)別模塊)
    2015-06-06
  • 基于python?win32setpixel?api?實(shí)現(xiàn)計(jì)算機(jī)圖形學(xué)相關(guān)操作(推薦)

    基于python?win32setpixel?api?實(shí)現(xiàn)計(jì)算機(jī)圖形學(xué)相關(guān)操作(推薦)

    這篇文章主要介紹了基于python?win32setpixel?api?實(shí)現(xiàn)計(jì)算機(jī)圖形學(xué)相關(guān)操作,這次的主要分為2個(gè)主要模塊,一個(gè)是實(shí)現(xiàn)畫線,畫圓的算法,還有填充的算法,以及裁剪的算法,需要的朋友可以參考下
    2021-12-12
  • Python實(shí)現(xiàn)邊緣提取的示例代碼

    Python實(shí)現(xiàn)邊緣提取的示例代碼

    這篇文章主要為大家詳細(xì)介紹了Python計(jì)算機(jī)視覺中如何實(shí)現(xiàn)邊緣提取,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)有一定幫助,需要的可以參考一下
    2022-05-05

最新評(píng)論

碌曲县| 嘉定区| 岢岚县| 黔西县| 临洮县| 威信县| 奉贤区| 深圳市| 新密市| 洪湖市| 八宿县| 泊头市| 克什克腾旗| 内乡县| 谢通门县| 千阳县| 滦南县| 泰安市| 浪卡子县| 广饶县| 延长县| 剑川县| 祁连县| 蒙自县| 湘潭县| 海丰县| 泗洪县| 马公市| 福泉市| 新田县| 高邮市| 酒泉市| 靖西县| 霍州市| 康马县| 杭州市| 白河县| 古丈县| 海原县| 明溪县| 灵武市|