網站首頁 編程語言 正文
1、引言
小魚:小屌絲,走啊,出去擼串啊,
小屌絲:沒時間啊,魚哥
小魚:嗯??? 啥事情讓你忙的擼串都不去了
小屌絲:我的BOSS讓我寫一個自動化平臺,但是我不知道這些參數放在**.py文件里面,還是放在配置文件**里面。
小魚:就因為這個?
小屌絲:對啊,
小魚:唉…我還以為啥事呢, 放在配置文件里。
小屌絲:但是,我對配置文件寫法不太熟(尷尬的一批)…
小魚:… 每次都上當, 當當不一樣。
小屌絲:嘿嘿… 這不是要向你學習嘛。
小魚:… 為了擼串,認了。
2、配置文件寫法
關于配置文件的寫法, 常用的 大致有:
- ini
- json
- toml
- yaml
接下來,我們就詳細聊一聊 這四種常用配置文件的寫法。
2.1 ini
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:\Project\Project\localdb.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:\Project\Project\localdb.ini")
#配置文件路徑
#print(f"配置文件路徑:{db_path}")
#對內容轉換成字典
db_msg = dict(cfg.items("localdb"))
#鏈接數據庫
con = pymysql.connect(**db_msg)
2.2 json
看到json,不要驚訝, 因為json也可以以配置文件存在的。
例如:
- npm(JavaScript 包管理工具類似 Python 的 pip)、
- 微軟出品的目前被廣泛使用的 VSCode 編輯器
都使用 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:\Project\Project\localdb.json") as js:
cfg = json.load(js)['localdb']
#以json格式輸出
pprint(cfg)
運行結果:
{'database': 'mysql',
?'host': '127.0.0.1',
?'password': '888888',
?'port': 3306,
?'user': 'root'}
2.3 toml
toml 格式(或 tml 格式)是 Github 聯合創始人 Tom Preston-Werner 所提出的一種配置文件格式。
toml 格式:
從樣例中可以看出,toml 有點類似于前面所講的 ini 文件。但是它比 ini 擴展了更多的內容。
當然,如果要使用toml,就需要先安裝。
老規矩:
pip install toml
其它安裝方式,直接看這兩篇:
Python3自動安裝第三方庫,跟pip說再見
Python:一行代碼,導入Python所有庫
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:\Project\Project\localdb.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 文件被間接地轉化成了字典類型。
2.4 yaml
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:\Project\Project\localdb.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 庫的解析結果基本一致。
3、總結
看到這里,今天的分享差不多就完事了。
今天共分享了四種讀取配置文件的方式:
ini
- json
- toml
- yaml
其實在實際工作中, 只需要掌握一種或者兩種方式,即可。
當然,如果要擴展自己的知識庫,那就需要多掌握幾種,
畢竟誰會嫌棄自己的知識儲備量少呢?
原文鏈接:https://blog.csdn.net/wuyoudeyuer/article/details/126152209
相關推薦
- 2022-12-28 React組件實例三大核心屬性State?props?Refs詳解_React
- 2023-02-07 Pytorch中的廣播機制詳解(Broadcast)_python
- 2023-04-03 Golang?filepath包常用函數詳解_Golang
- 2021-12-10 golang?db事務的統一封裝的實現_Golang
- 2022-08-23 Python中更優雅的日志記錄方案詳解_python
- 2022-11-28 Android線程間通信?Handler使用詳解_Android
- 2022-07-08 Python實現超快窗口截圖功能詳解_python
- 2023-12-26 Mapper.xml文件中SQL新增數據的簡便寫法
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支