<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
小魚:小屌絲,走啊,出去擼串啊,
小屌絲:沒時間啊,魚哥
小魚:嗯??? 啥事情讓你忙的擼串都不去了
小屌絲:我的BOSS讓我寫一個自動化平臺,但是我不知道這些引數放在**.py檔案裡面,還是放在組態檔**裡面。
小魚:就因為這個?
小屌絲:對啊,
小魚:唉…我還以為啥事呢, 放在組態檔裡。
小屌絲:但是,我對組態檔寫法不太熟(尷尬的一批)…
小魚:… 每次都上當, 噹噹不一樣。
小屌絲:嘿嘿… 這不是要向你學習嘛。
小魚:… 為了擼串,認了。
關於組態檔的寫法, 常用的 大致有:
- ini
- json
- toml
- yaml
接下來,我們就詳細聊一聊 這四種常用組態檔的寫法。
ini 即 Initialize ,最早是在 Windows 上組態檔的儲存格式。
ini 檔案的寫法通俗易懂,往往比較簡單,通常由節(Section)、鍵(key)和值(value)組成,就像以下形式
localdb.ini
[localdb] Host = 127.0.0.1 user = root password = 888888 port = 3306 database = mysql
Python 本身內建的 configparser 標準庫,我們直接就可以用來對 ini 檔案進行解析。
如我們將上述內容儲存在一個名為 test1.ini 的檔案中,然後使用 read() 方法來進行解析和讀取,最後通過 items() 方法來獲取指定節點下的所有鍵值對。
程式碼範例:
# -*- coding:utf-8 -*- # @Time : 2022-08-04 # @Author : Carl_DJ from configparser import ConfigParser cfg = ConfigParser() db_path= cfg.read("D:ProjectProjectlocaldb.ini") #組態檔路徑 print(f"組態檔路徑:{db_path}") db_msg = cfg.items("localdb") #組態檔內容 print(f"組態檔內容:{db_msg}")
執行結果
組態檔路徑:['D:\Project\Project\localdb.ini']
組態檔內容:{'host': '127.0.0.1', 'user': 'root', 'password': '888888', 'port': '3306', 'database': 'mysql'}
注意點
configparser 預設將值以字串的形式呈現。
上面程式碼,獲取到鍵值對後,我們再來轉換成字典,然後再進行傳參。
程式碼範例
# -*- coding:utf-8 -*- # @Time : 2022-08-04 # @Author : Carl_DJ from configparser import ConfigParser import pymysql cfg = ConfigParser() db_path= cfg.read("D:ProjectProjectlocaldb.ini") #組態檔路徑 #print(f"組態檔路徑:{db_path}") #對內容轉換成字典 db_msg = dict(cfg.items("localdb")) #連結資料庫 con = pymysql.connect(**db_msg)
看到json,不要驚訝, 因為json也可以以組態檔存在的。
例如:
都使用 json 編寫設定引數。
當然 json也是python標準庫。
我們通過load() 和loads()方法來匯入檔案式和字串的 json 內容。
localdb.json
{ "localdb":{ "host": "127.0.0.1", "user": "root", "password": "888888", "port": 3306, "database": "mysql" } }
程式碼範例
# -*- coding:utf-8 -*- # @Time : 2022-08-04 # @Author : Carl_DJ import json from pprint import pprint with open("D:ProjectProjectlocaldb.json") as js: cfg = json.load(js)['localdb'] #以json格式輸出 pprint(cfg)
執行結果:
{'database': 'mysql',
'host': '127.0.0.1',
'password': '888888',
'port': 3306,
'user': 'root'}
toml 格式(或 tml 格式)是 Github 聯合創始人 Tom Preston-Werner 所提出的一種組態檔格式。
toml 格式:
從樣例中可以看出,toml 有點類似於前面所講的 ini 檔案。但是它比 ini 擴充套件了更多的內容。
當然,如果要使用toml,就需要先安裝。
老規矩:
pip install toml
其它安裝方式,直接看這兩篇:
localdb.toml
[mysql] host = "127.0.0.1" user = "root" port = 3306 database = "test" [mysql.parameters] pool_size = 5 charset = "utf8" [mysql.fields] pandas_cols = [ "id", "name", "age", "date"]
程式碼範例
# -*- coding:utf-8 -*- # @Time : 2022-08-04 # @Author : Carl_DJ import toml,os from pprint import pprint cfg = toml.load(os.path.expanduser("D:ProjectProjectlocaldb.toml")) pprint(cfg)
執行結果
{'mysql': {'database': 'test',
'fields': {'pandas_cols': ['id', 'name', 'age', 'date']},
'host': '127.0.0.1',
'parameters': {'charset': 'utf8', 'pool_size': 5},
'port': 3306,
'user': 'root'}}
可以看到 toml 檔案被間接地轉化成了字典型別。
yaml 格式(或 yml 格式)是目前較為流行的一種組態檔,它早在 2001 由一個名為 Clark Evans 的人提出;
同時它也是目前被廣泛使用的組態檔型別,典型的就是 Docker 容器裡的 docker-compose.yml 組態檔。
YAML 官方早已經提供了相應的 Python 庫進行支援,即 PyYAML,
所以,第一步,需要安裝
pip install pyyaml
用法:
與 json 庫和 toml 庫一樣,通過 load() 方法來進行載入。
但是,考慮到安全性, 所以,最好是使用 safe_load() 來代替 load() 方法
localdb.yaml
mysql: host: "127.0.0.1" port: 3306 user: "root" password: "888888" database: "test" parameter: pool_size: 5 charset: "utf8" fields: pandas_cols: - id - name - age - date
程式碼範例:
# -*- coding:utf-8 -*- # @Time : 2022-08-04 # @Author : Carl_DJ import os from pprint import pprint with open("D:ProjectProjectlocaldb.json") as ya: cfg = yaml.safe_load(ya) pprint(cfg)
執行結果:
{'mysql': {'database': 'test',
'fields': {'pandas_cols': ['id', 'name', 'age', 'date']},
'host': '127.0.0.1',
'parameter': {'charset': 'utf8', 'pool_size': 5},
'password': '888888',
'port': 3306,
'user': 'root'}}
可以看到最後結果和前面的 toml 庫的解析結果基本一致。
看到這裡,今天的分享差不多就完事了。
今天共分享了四種讀取組態檔的方式:
ini
其實在實際工作中, 只需要掌握一種或者兩種方式,即可。
當然,如果要擴充套件自己的知識庫,那就需要多掌握幾種,
畢竟誰會嫌棄自己的知識儲備量少呢?
以上就是Python3中常見組態檔寫法彙總的詳細內容,更多關於Python組態檔的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45