yaml在python中的應用(yamlload使用)

本文目錄一覽:

python中四種配置文件

常用的配置文件後綴是.ini、.conf、.py,當然還有使用.json、.txt的,推薦使用常用的.ini、.py,配置文件的名字一般是config便於理解和使用。

ini配置文件,這類配置文件我們使用內置configparser庫來使用,它可以實現配置文件的寫入、更新、刪除、讀取等操作非常方便,建議使用這種方式。

新建一個config.ini的配置文件內容如下,編碼格式要是 utf-8 以免出錯。:

其中[]中的是section節點,該節點下的等式是option即鍵=值

然後每一行寫一個option ,每個選項就是一個option。直接寫名字,後面加 ” = ” 再加上它的值就行,字符串的表示不要加引號,否則引號也會被解析出來。

可以在配置文件中加入注釋 ,但是注釋必須是單獨的一行,且以 「#」 開頭。只是每次運行時不會讀入注釋,只要運行一次,寫入文件後,所有的注釋都會消失。

config.json文件

使用python內置的 json 標準庫進行解析ini文件。

load() 從json文件中讀取json格式數據

loads() 將字符串類型數據轉化為json格式數據

dump() 將json格式數據保存到文件

dumps() 將json格式數據保存為字符串類型

TOML的語法廣泛地由key = “value”、[節名]、#注釋構成。

支持以下數據類型:字符串、整形、浮點型、布爾型、日期時間、數組和圖表。

config.toml文件

使用外部庫 toml 解析toml文件。

安裝:pip install toml

讀取文件

安裝:

YAML是目前最推薦的配置文件格式。優秀的配置文件標準它幾乎都有:

容易閱讀和修改,支持注釋。

支持豐富的數據類型。

不同格式的明確表達。

yaml使用時需要注意:

yaml強制縮進。雖然不規定具體縮進幾個空格,但是同一級的內容要保持相同的縮進。

冒號後面一定要加空格, 否則無法解析。

python解析 yaml 可以使用pyyaml庫,操作和標準的文件操作非常類似:

得到的data就是解析後的數據,在python當中,它是一個嵌套的字典:

想獲取某一項配置,再通過字典的操作獲取:

config.yaml文件

讀取

Python Yaml配置工具

【GiantPandaCV導語】深度學習調參過程中會遇到很多參數,為了完整保存一個項目的所有配置,推薦使用yaml工具進行配置。

Yaml是可讀的數據序列化語言,常用於配置文件。

支持類型有:

語法特點:

安裝用命令:

舉個例子:

注意:關鍵字不能重複;不能使用tab,必須使用空格。

處理的腳本:

輸出結果:

這個警告取消方法是:添加默認loader

保存:

支持的類型:

Python 自動化處理 Yaml 文件-

Yaml文件內容—示例1:

Yaml文件內容—示例2:

從上述示例文件內容可以看到 Yaml 數據結構:

1). 對象:鍵值對的集合(簡稱 “映射或字典”)

例如:family 和 address 這兩個對象後面分別有對應的鍵值對集合。

2). 鍵值對用冒號 「:」 結構表示,冒號與值之間需用空格分隔

例如:

family 對象中的 key 為 name 與其對應的 value 值 Smile_Family 之間是使用空格分隔的。

address 對象中的 key 為 province 與其對應的 value 值 BeiJing 之間是使用空格分隔的。

3). 數組:一組按序排列的值(簡稱 “序列或列表”),數組前加有 「-」 符號,符號與值之間需用空格分隔

例如:

parents 中的 John 和 Jane

children 中的 Lily 和 Frank

4). 純量(scalars):單個的、不可再分的值。例如:字符串、bool值、整數、浮點數、時間、日期、null等

None值可用null也可用 ~ 表示;

yaml文件內容如下:

Python解析輸出為:

這個例子輸出一個字典,其中value包括所有基本類型

Yaml文件內容如下:

Python解析輸出為:

Yaml文件內容如下:

Python輸出為:

如果字符串沒有空格或特殊字符,不需要加引號,但如果其中有空格或特殊字符,則需要加引號。

這裡要注意單引號和雙引號的區別:

單引號中的特殊字符轉到 Python 會被轉義,也就是到最後是原樣輸出;

雙引號不會被 Python 轉義,到最後是輸出了特殊字符;

Yaml文件內容如下:

Python輸出:

python3 對象 |字典|json|yaml|字符串 相互轉化

在研究 k8s 的yaml 配置文件的時候,我總擔心自己一不小心 會寫錯,所以我嚮往 使用將對象 序列化 yaml 的形式,

其實 python object 可以 直接 轉 yaml ,甚至也可以 直接 轉成yaml文件!!!

這裡 會經常用到幾個 函數 vars() ast.

我們先嘗試用最笨的方法 實現 object到yaml 的轉化

在python對象 convert to dict 的形式,使用 vars()函數

然後 dict convert to json 使用 json.dumps(dict)函數

然後 json converte to yaml 使用 ya= yaml.load(json.dumps(dict)) 然後

再 yaml.safe_dump(ya,default_flow_style=False)

至此我們看到 從 python Object — dict —- json — yaml 的轉化

其中 obj dict json yaml 轉 string ,只要 str()函數即可,或者 str(vars())結合

yaml 格式 寫入到文件 ,需要注意的是, open()函數 的mode 一定要是 ‘w’ ,不能是』wb’, b代表是二進制寫入

yaml 寫入的是dict str,使用 『wb’ 會報錯,[yaml TypeError: a bytes-like object is required, not ‘str’]

【出現該錯誤往往是通過open()函數打開文本文件時,使用了『rb』屬性,如:fileHandle=open(filename,’rb’),則此時是通過二進制方式打開文件的,所以在後面處理時如果使用了str()函數,就會出現該錯誤,該錯誤不會再python2中出現。

具體解決方法有以下兩種:

第一種,在open()函數中使用『r』屬性,即文本方式讀取,而不是『rb』,以二進制文件方式讀取,可以直接解決問題。

第二種,在open()函數中使用『rb』,可以在使用之前進行轉換,有以下實例,來自: 】

其實 python object 可以 直接 轉 yaml ,甚至也可以 直接 轉成yaml文件!!!

比如我已經定義了一個 Dog python class,他有 好幾個屬性 並已經賦值初始化了

另外生成 yaml 對象

生成yaml文件

結果是

反過來 yaml —- json — 持久化 json 文件 indent=1屬性是為了讓 json 不以單行展示,而是展開

注意的是 python 的 dict 和set 很相似 ,都是 { }, set 里是list, dict 是鍵值對

【# set object is not JSON serializable [duplicate]

打開 demo.json

yaml — dict

yaml — python object

json — dict

json.loads()

dict– json

json.jumps()

str — dict

newdict=dict(str)

json — python object

一個python object無法直接與json轉化,只能先將對象轉化成dictionary,再轉化成json;對json,也只能先轉換成dictionary,再轉化成object,通過實踐,源碼如下:

yaml — python object

對yaml,也只能先轉換成json —dictionary,再轉化成object,通過實踐,源碼如下:

dict — -python object

python對象 默認都有一個 私有的屬性 dict 取值 就是 object的 字典形式, 賦值就就可以給對象屬性對應賦值

例如json 轉 對象

對象 轉 json

Python之dict(或對象)與json之間的互相轉化

在Python語言中,json數據與dict字典以及對象之間的轉化,是必不可少的操作。

dict字典轉json數據

對象轉json數據

json數據轉成dict字典

json數據轉成對象

json的load()與dump()方法的使用

dump()方法的使用

YAML 文件介紹

YAML 是一種可讀性非常高,與程序語言數據結構非常接近。同時具備豐富的表達能力和可擴展性,並且易於使用的數據標記語言。

YAML是 “YAML Ain’t a Markup Language”(YAML不是一種標記語言)的遞歸縮寫。

這麼命名的方式,表示 YAML 強調的不是標記,而是數據本身。

YAML 參考了其他多種語言,包括:XML、C語言、Python、Perl 以及電子郵件格式 RFC2822。

YAML 發佈與 2001 年,之前並不出名,現在逐漸開始流行。測試圈中,主要應用於自動化測試過程,用來進行數據驅動的數據存儲載體。

基本語法規則(很接近 Python 的語法規則):

支持的數據格式:

以下是 YAML 數據格式的示例:

對象

轉換為Python字典格式為

YAML也支持另一種對象的寫法,將所有的鍵值對寫成一個行內對象

轉換為Python字典格式為

數組

一組連詞線開頭的行,構成一個數組

轉換為Python

也可以通過縮進空格來表示多維數組

轉換為Python的列表

當然,也可以採用行內表示法

轉換為Python

純量

純量是最基本的、不可再分的值。 以下數據類型都是常見的純量。

純量一般表示如下

轉換為Python

yaml 文件通過 pyyaml 庫轉換後就是 Python 中對應的數據類型。直接進行操作即可,相較從 excel 中讀取數據全部是字符串的方式來說,處理更方便。相對於 json 格式,可讀性更高。

yaml使用需要什麼python庫

Python三種內建數據結構——列表、元組字典依:列表: 列表list處理組序項目數據結構即列表存儲序列項目, Python每項目間用逗號割 列表項目應該包括括號Python知道指明列表看列表字符串數字即包含種類

原創文章,作者:OYYFM,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/330178.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
OYYFM的頭像OYYFM
上一篇 2025-01-16 15:46
下一篇 2025-01-16 15:46

相關推薦

  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29

發表回復

登錄後才能評論