本文目錄一覽:
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文件
讀取
2019-05-30 Python+Jinja2+yaml 批量生成配置
目前來看,Python+yaml+Jinja2是非常方便生成批量配置的組合,在運維工作中用於批量生成設備的基礎配置。
這裡我的案例是配置一批交換機,基礎配置不同的地方有:loopback地址(IPV4和IPV6),設備名稱,ISIS網絡號,至於其他互聯地址什麼的因為情況比較複雜,還是手工做吧。
那麼思路就有了。
1、生成yaml文件,類似於下面結構:
這裡說明一下,loopback地址的V4網段是先規劃好的,V6地址和ISIS網絡號通過一定規則根據V4地址生成,這個yaml文件可以通過讀取excel文件,按照算法生成yaml文件,這個在其他文章里再寫。
2、讀取yaml文件,生成一個由字典組成的列表。每個字典的信息就包含了每台設備需要的變量。
3、寫一個函數,遍歷列表裡的字典,每讀取一個字典,把其中變量取出來放進一個臨時字典,渲染jinja2的模板,對每個字典輸出不同的配置文件。這個臨時字典每讀取一次就清空,重新寫入變量。
有一些細節比如文檔取名,時間函數等要調用一些模塊,總結一下涉及的知識點,有:yaml模塊,jinja2模塊,os模塊,日期函數,條件循環,I/O操作。
附上python腳本:
模板文件放在『templates』目錄下,否則會報錯找不到文件。
python新手,有不合理的地方請高手指點。
YAML用法詳解
近期在調試SONIC上基於Ansible的PTF測試平台時,使用到了YANML配置語言,此處稍作解釋,匯總一下YAML的語法及基本使用方法。
YAML ( /ˈjæməl/ ,尾音類似 camel 駱駝)是一個可讀性高,用來表達數據序列的格式。YAML參考了其他多種語言,包括: C語言 、 Python 、 Perl ,並從 XML 、電子郵件的數據格式(RFC 2822 )中獲得靈感。上述介紹引用自 維基百科 ,通俗的講,YAML是專門用來寫配置文件的語言,非常簡潔和強大,遠比 JSON/XML格式方便。YAML允許在層次結構中存儲結構化數據。YAML 旨在以人為和機器可讀,並且開銷最小。YAML 規範可以在 yaml.org 找到,官方還提供了一個便捷的 YAML小抄 。
再次強調,字符串不需要包在引號之內。有兩種方法書寫多行文字(multi-line strings),一種可以保存新行(使用|字符),另一種可以摺疊新行(使用字符)
和保存新行不同的是,換行字符會被轉換成空白字符。而引領空白字符則會被自動消去。
常量值最基本的數字、字符串、布爾值等等
在python中,會將上述鍵值對解析為一個字典
上述鍵值對可以嵌套,從而實現更加複雜的數據結構:
在python中,會將其解析為嵌套的字典結構:
在python中,會將其解析為字典嵌套列表的複合數據結構:
為了維持文件的簡潔,並避免數據輸入的錯誤,YAML提供了結點參考(*)和散列合併()參考到其他結點標籤的錨點標記()。參考會將樹狀結構加入錨點標記的內容,並可以在所有數據結構中運作(可以參考上面”ship-to”的示例)合併只有散列表可以使用,可以將鍵值自錨點標記複製到指定的散列表中。當數據被instantiate合併和參考會被剖析器自動展開。
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 格式,可讀性更高。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/303043.html