精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

超全!Python 中常見的配置文件寫法

開發(fā) 后端
在本文里列舉的配置文件類型其復雜性由上到下依次增加:ini < json ≈ toml < yaml,它們之間各有優(yōu)劣,可以根據(jù)自己實際的需求和團隊協(xié)作要求來具體選擇。

為什么要寫配置文件

在開發(fā)過程中,我們常常會用到一些固定參數(shù)或者是常量。對于這些較為固定且常用到的部分,往往會將其寫到一個固定文件中,避免在不同的模塊代碼中重復出現(xiàn)從而保持核心代碼整潔。

這個固定文件我們可以直接寫成一個 .py 文件,例如 settings.py 或 config.py,這樣的好處就是能夠在同一工程下直接通過 import 來導入當中的部分;但如果我們需要在其他非 Python 的平臺進行配置文件共享時,寫成單個 .py 就不是一個很好的選擇。

這時我們就應該選擇通用的配置文件類型來作為存儲這些固定的部分。目前常用且流行的配置文件格式類型主要有 ini、json、toml、yaml、xml 等,這些類型的配置文件我們都可以通過標準庫或第三方庫來進行解析。

ini

ini 即 Initialize 初始化之意,早期是在 Windows 上配置文件的存儲格式。ini 文件的寫法通俗易懂,往往比較簡單,通常由節(jié)(Section)、鍵(key)和值(value)組成,就像以下形式:

[localdb]
host = 127.0.0.1
user = root
password = 123456
port = 3306
database = mysql

Python 本身內置的 configparser 標準庫,我們直接就可以用來對 ini 文件進行解析。如我們將上述內容保存在一個名為 db.ini 的文件中,然后使用 read() 方法來進行解析和讀取,最后通過 items() 方法來獲取指定節(jié)點下的所有鍵值對。

>>> from configparser import ConfigParser
>>> cfg = ConfigParser()
>>> cfg.read("/Users/Bobot/db.ini")
['/Users/Bobot/db.ini']
>>> cfg.items("localdb")
[('host', '127.0.0.1'), ('user', 'root'), ('password', '123456'), ('port', '3306'), ('database', 'mysql')]

需要注意的是,configparser 默認將值以字符串的形式呈現(xiàn),所以這也就是為什么我們在 db.ini 文件中沒有加引號而是直接將字面量寫在上面的原因。

獲取到鍵值對后,我其實直接就將其轉換成字典,然后通過解包的方式進行穿參,保持代碼簡潔:

#!pip install pymysql
import pymysql
from configparser import ConfigParser
cfg = ConfigParser()
cfg.read("/Users/Bobot/db.ini")
db_cfg = dict(cfg.items("localdb"))
con = pymysql.connect(**db_cfg)

json

json 格式可以說是我們常見的一種文件形式了,也是目前在互聯(lián)網較為流行的一種數(shù)據(jù)交換格式。除此之外,json 有時也是配置文件的一種。

比如 npm(JavaScript 包管理工具類似 Python 的 pip)、以及微軟出品的目前被廣泛使用的 VSCode 編輯器,都使用 json 編寫配置參數(shù)。

和 configparser 一樣,Python 也內置了 json 標準庫,可以通過 load() 和 loads() 方法來導入文件式和字符串的 json 內容。

{
"localdb":{
"host": "127.0.0.1",
"user": "root",
"password": "123456",
"port": 3306,
"database": "mysql"
}
}

我們將上述內容保存為 db.json 后進行讀取和解析,json 庫讀取 json 文件相對簡單容易,而且很容易解析成 Python 的字典對象。

>>> import json
>>> from pprint import pprint
>>>
>>> with open('/Users/Bobot/db.json') as j:
... cfg = json.load(j)['localdb']
...
>>> pprint(cfg)
{'database': 'mysql',
'host': '127.0.0.1',
'password': '123456',
'port': 3306,
'user': 'root'}

使用 json 文件配置的缺點就是語法標準嚴格限制,為人所詬病之一的就是無法在當中寫注釋,除非采取 json 類型的其他超集作為替代方案(VSCode 中能寫注釋的 json 參數(shù)配置文件便是代替方案的一種);同時存在嵌套過深的問題,容易導致出錯,不宜用來寫過長或復雜的參數(shù)配置信息。

toml

toml 格式(或 tml 格式)是 Github 聯(lián)合創(chuàng)始人 Tom Preston-Werner 所提出的一種配置文件格式。根據(jù)維基百科的資料,toml 最開始提出時是在 2013年7月份,距今已有七年時間;它在某些方面也與后面要談到的 yaml 文件有些類似,但如果當你知道 yaml 的規(guī)范有幾十頁(沒有錯,真的就是幾十頁……)的時候,可能你真的就不太愿意去寫那么復雜的配置文件,toml 格式則倒是個不錯的選擇。

toml 格式大致如下:

01-toml樣式

從這里可以看出 toml 有點類似于前面所講的 ini 文件。但是它比 ini 擴展了更多的內容。

在樣例圖片中我們可以看到,除了基本的字符串以外,例如時間戳、布爾值、數(shù)組等都進一步支持,而且樣式和 Python 的原生寫法十分類似。

當然這里不會過多介紹 toml 格式的一些規(guī)范說明,有人已經對官方的規(guī)范文檔進行了翻譯,有興趣的朋友可以直接查閱。

這么契合 Python 方式的配置文件類型已經有開發(fā)者造出了相應的「輪子」,目前在 Github 上 Stars 數(shù)最多的是則是 uiri/toml 的版本,不過該版本僅通過了 v0.5 版本 toml 規(guī)范,但在使用上還是蠻簡潔的,我們可以通過 pip 命令進行安裝

pip install toml

該庫的解析方式很簡單,也有點類似于 json 庫的解析用法,即通過load() 或 loads() 來進行解析;同理轉換并導出也是同樣類似的用法。

比如我們現(xiàn)在將以下內容寫入到 config.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"]

緊接著我們就可以通過 toml 庫中的 load() 方法來進行讀取:

>>> import toml
>>> import os
>>> from pprint import pprint
>>> cfg = toml.load(os.path.expanduser("~/Desktop/config.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 文件被間接地轉化成了字典類型,當然這也就是 json 版的寫法(將單引號替換成雙引號即可),方便我們后續(xù)調用或者傳參。

yaml

yaml 格式(或 yml 格式)是目前較為流行的一種配置文件,它早在 2001 由一個名為 Clark Evans 的人提出;同時它也是目前被廣泛使用的配置文件類型,典型的就是 Docker 容器里的 docker-compose.yml 配置文件,如果經常使用 Docker 進行部署的人對此不會陌生。

yaml 文件的設計從 Python、XML 等地方獲取靈感,所以在使用時能很清楚地看到這些部分的影子。

在上一節(jié) toml 內容里我曾提到,yaml 的規(guī)范內容可以說是冗長和復雜,足足有80頁之多(斗尊強者,恐怖如斯……)。

02-yaml規(guī)范頁數(shù)

所以感興趣的朋友可以再自行了解相關用法。

YAML 官方早已經提供了相應的 Python 庫進行支持,即 PyYAML;當然也同樣需要我們事先進行安裝:

pip install pyyaml

同 json 庫和 toml 庫一樣,通過 load() 方法來進行加載。

需要注意的是,使用 load() 方法會存在一定的安全隱患,從思科 Talos 的這份報告中我們可以看到,如果加載了未知或不信任的 yaml 文件,那么有可能會存在被攻擊的風險和網絡安全隱患,因為它能夠直接調用相應的 Python 函數(shù)來執(zhí)行為攻擊者所需要的命令,比如說在 yaml 文件中寫入這么一段:

# 使用Linux和macOS的朋友不要輕易嘗試
!!python/object/apply:os.system ["rm -rf /"]

因此最好是使用 safe_load() 來代替 load() 方法。

這和 Python 內置的 string 標準庫中 Template 類的 substitute() 模板方法一樣存在著同樣的安全隱患,所以使用 safe_substitute() 來替代是一樣的道理。

如我們現(xiàn)在將之前的一些配置信息寫入 config.yaml 文件中:

mysql:
host: "127.0.0.1"
port: 3306
user: "root"
password: "123456"
database: "test"
parameter:
pool_size: 5
charset: "utf8"
fields:
pandas_cols:
- id
- name
- age
- date

然后我們通過 safe_load() 方法進行解析:

>>> import os
>>> from pprint import pprint
>>>
>>> with open(os.path.expanduser("~/config.yaml"), "r") as config:
... cfg = yaml.safe_load(config)
...
>>> pprint(cfg)
{'mysql': {'database': 'test',
'fields': {'pandas_cols': ['id', 'name', 'age', 'date']},
'host': '127.0.0.1',
'parameter': {'charset': 'utf8', 'pool_size': 5},
'password': '123456',
'port': 3306,
'user': 'root'}}

可以看到最后結果和前面的 toml 庫的解析結果基本一致。

結尾

本文列舉了一些主流且常見的配置文件類型及其 Python 的讀取方法,可能有的讀者會發(fā)現(xiàn)當中沒有 xml 格式類型的內容。對于 xml 配置文件可能與 Java 系語言打交道的朋友遇見得會多一些,但 xml 文件的可讀性實在是讓人望而生畏;對 xml 文件不了解的朋友可以使用 Chrome 瀏覽器隨便進入一個網站然后按下 F12 進入開發(fā)者后查看那密密麻麻的 html 元素便是 .xml 的縮影。

除了這些主流的配置文件類型之外,像一些 .cfg、.properties 等都可以作為配置文件,甚至和開頭提到的那樣,你單獨用一個 .py 文件來書寫各類配置信息作為配置文件進行導入都是沒問題,只是在跨語言共享時可能會有些障礙。因此本文就不過多介紹,感興趣的朋友可以進一步自行了解。

在本文里列舉的配置文件類型其復雜性由上到下依次增加:ini < json ≈ toml < yaml,它們之間各有優(yōu)劣,可以根據(jù)自己實際的需求和團隊協(xié)作要求來具體選擇。

責任編輯:龐桂玉 來源: 大俠學Python
相關推薦

2022-06-13 08:49:58

Python配置文件

2020-11-24 11:50:52

Python文件代碼

2011-03-07 17:15:52

ProFTPD配置

2010-01-12 11:37:06

Linux常見文件

2011-03-25 17:13:37

Nagios配置文件

2011-02-25 16:39:34

proftpd配置文件

2021-07-05 12:09:58

Python編程語言

2010-03-18 18:17:01

Python 配置文件

2022-07-07 08:01:51

Python魔法方法代碼

2025-07-31 06:10:00

2010-02-25 17:01:48

Linux配置文件

2011-01-13 16:27:26

Linux配置文件

2011-03-03 13:16:32

Proftpd配置文件

2011-01-19 14:00:21

2011-03-23 15:13:08

Nagios配置文件

2010-08-25 10:24:55

DHCP配置文件

2011-09-01 18:02:45

samba服務器

2010-12-28 16:35:32

Outlook 配置文

2020-07-10 17:40:01

人工智能網絡技術

2019-06-21 10:13:26

JavaScript錯誤開發(fā)
點贊
收藏

51CTO技術棧公眾號

欧美自拍视频| 黄在线观看免费网站ktv| 精品一区二区三区久久| 久久97精品久久久久久久不卡 | 欧美激情一区二区视频| 精品三级av| 欧美三级韩国三级日本三斤 | 亚洲卡一卡二| 久久免费国产精品| 99在线视频播放| 中文字幕在线播| 一区二区三区四区日韩| 精品无人区乱码1区2区3区在线 | 亚洲国产91视频| 亚瑟在线精品视频| www亚洲国产| 免费在线黄色电影| 高清不卡一区二区| 国产美女91呻吟求| 亚洲不卡视频在线观看| 午夜精品亚洲| 中文字幕av一区二区| 欧类av怡春院| 久久伊人影院| 精品视频在线免费| 日本精品一区二区三区四区| 色呦呦在线播放| 亚洲视频一区在线| 亚洲a∨一区二区三区| 五月婷婷久久久| 国产成人精品影视| 91精品综合视频| 亚洲第一区av| 亚洲制服少妇| 久久人人97超碰精品888| 天堂а√在线中文在线鲁大师| 羞羞答答一区二区| 亚洲精品99久久久久中文字幕| 中文字幕人妻无码系列第三区| 亚洲成人va| 欧洲日韩一区二区三区| 欧美在线观看成人| 九色porny视频在线观看| 亚洲午夜精品在线| www.国产亚洲| 在线三级电影| 一区二区三区日韩欧美精品| 警花观音坐莲激情销魂小说| 男女啪啪在线观看| 国产精品久久久久久久久晋中| 欧美激情第六页| 亚洲人妻一区二区三区| 99国产精品久久久久久久久久| 翡翠波斯猫1977年美国| 国产成人手机在线| 成人精品视频.| 国精产品一区二区| 日韩av成人| 国产亚洲欧美中文| 日韩精品一区二区三区丰满| av在线资源网| 最新国产の精品合集bt伙计| 中文视频一区视频二区视频三区| 日韩黄色影院| 亚洲男人的天堂av| www.av毛片| 亚洲美女尤物影院| 欧美在线看片a免费观看| 国产91色在线观看| 一区二区三区| 欧美成人艳星乳罩| 亚洲视频 中文字幕| 日韩福利视频一区| 亚洲人在线视频| 日本不卡一区视频| 欧美在线网址| 98精品在线视频| 波多野结衣mp4| 精品一区二区三区在线观看| 51蜜桃传媒精品一区二区| 刘亦菲毛片一区二区三区| 99国产精品久久久久久久久久久| 日韩.欧美.亚洲| 黄色免费网站在线| 亚洲mv大片欧洲mv大片精品| www黄色在线| 警花av一区二区三区| 精品国产乱码久久久久久久久| 精品无码在线视频| 99久久精品国产亚洲精品| 欧美国产日韩在线| 精品久久久久久久久久久久久久久久| 久久97超碰色| 农村寡妇一区二区三区| 欧洲日本在线| 欧美日韩国产色| 亚洲天堂2018av| 国产一区在线电影| 色一区av在线| 日本在线小视频| 久久国产精品第一页| 国产精华一区| 免费黄色网址在线观看| 欧美日韩国产一区在线| 午夜视频在线观| 综合伊思人在钱三区| 欧美xxxx18性欧美| 天天射天天干天天| 成人激情综合网站| 手机福利在线视频| 少妇一区视频| 精品福利一区二区三区| fc2ppv在线播放| 久久一区视频| 精品一卡二卡三卡四卡日本乱码| 欧美激情免费| 色国产精品一区在线观看| 无码人妻久久一区二区三区蜜桃| 成人免费在线观看av| 38少妇精品导航| 丁香六月色婷婷| 亚洲欧美在线观看| 亚洲xxxx2d动漫1| 私拍精品福利视频在线一区| 欧美激情视频在线免费观看 欧美视频免费一 | 欧美亚洲国产bt| 无遮挡aaaaa大片免费看| 欧美在线黄色| 亚洲一区二区免费| 美女国产在线| 欧美色视频在线观看| 亚洲欧美视频在线播放| 重囗味另类老妇506070| 成人国产精品色哟哟| av片在线免费观看| 91黄视频在线| 成人免费无遮挡无码黄漫视频| 亚洲国产一区二区三区a毛片| 114国产精品久久免费观看| 免费日本一区二区三区视频| 欧美日韩一二三区| 91视频免费在观看| 日本aⅴ精品一区二区三区| 品久久久久久久久久96高清| 中文字幕在线免费观看视频| 日韩精品一二三四区| 日韩三级av在线| 99re免费视频精品全部| 91国视频在线| 亚洲人成精品久久久| 国产mv久久久| av在线天堂播放| 欧美日本韩国一区二区三区视频 | 亚洲国产一区二区精品专区| 国产伦精品一区二区三区照片91| 免费毛片在线看片免费丝瓜视频 | 狠狠干综合网| 国产欧美日韩综合精品二区| 久草在线资源福利站| 亚洲欧美变态国产另类| 九九热最新视频| 国产精品欧美极品| 国产黑丝在线视频| 欧美激情精品久久久六区热门| 99国精产品一二二线| 蜜乳av一区| 日韩精品在线视频美女| 无码日韩精品一区二区| 国产精品女主播av| 污视频在线观看免费网站| 国产字幕视频一区二区| 精品久久中出| 福利一区二区免费视频| 美女黄色丝袜一区| 日韩美女一级视频| 欧美性猛片xxxx免费看久爱| 久久99久久99精品免费看小说| 国产寡妇亲子伦一区二区| 成年女人18级毛片毛片免费| 免费欧美一区| 成人女保姆的销魂服务| xxxx视频在线| 在线视频国产日韩| 精品国产无码一区二区三区| 狠狠色香婷婷久久亚洲精品| 国精产品视频一二二区| 成人午夜av在线| 国产a级片免费观看| 久久久久久久久久久久久久| 国语精品免费视频| 视频欧美精品| 欧美最近摘花xxxx摘花| 国产原创在线观看| 日韩精品在线观| 精品国产无码一区二区三区| 91久久免费观看| 久久久久亚洲AV| 日本一区二区视频在线观看| 丰满岳乱妇一区二区| 免费不卡在线视频| 99视频在线免费播放| 91综合久久| 欧美高清视频一区| 成人av动漫| 成人欧美一区二区三区黑人孕妇| 午夜伦理福利在线| 九九热99久久久国产盗摄| 久蕉在线视频| 日韩av在线网址| 国产sm主人调教女m视频| 日韩欧美精品网站| 午夜偷拍福利视频| 亚洲欧洲国产日本综合| 国产精品一二三区在线观看| 成人av资源在线| 成人黄色在线免费观看| 特级西西444www| 久久99精品久久久久久园产越南| 51国偷自产一区二区三区| 日本精品另类| 国产91露脸中文字幕在线| 91禁在线看| 久久成年人免费电影| 成人精品一区二区三区免费 | 好看的亚洲午夜视频在线| 9999在线观看| 日韩在线精品| 亚洲国产欧美不卡在线观看 | 亚洲无线码在线一区观看| 四虎影视在线播放| 亚洲黄色免费三级| 韩国av在线免费观看| 日韩欧美综合在线| 国产熟女一区二区三区四区| 欧美嫩在线观看| 一区二区三区精| 欧美日韩视频一区二区| 国产在线观看第一页| 色av一区二区| 91久久国产综合久久91| 一本大道久久精品懂色aⅴ| 日韩免费视频一区二区视频在线观看| 亚洲va天堂va国产va久| 日本三级片在线观看| 亚洲成人免费观看| 成人午夜视频精品一区| 欧美日韩性生活视频| 毛片毛片女人毛片毛片| 一本大道久久a久久综合婷婷| 无码人妻aⅴ一区二区三区有奶水| 欧美性极品xxxx做受| 台湾佬中文在线| 在线免费视频一区二区| 在线免费观看高清视频| 777欧美精品| 亚洲av综合色区无码一区爱av | 国产视频一区三区| 免费黄色日本网站| 日韩精品亚洲专区| 97人人爽人人| 福利电影一区二区三区| 最近中文字幕无免费| 久久久国产精品午夜一区ai换脸| 国产传媒在线看| 亚洲黄色性网站| 日韩精品成人在线| 欧洲精品在线观看| 99国产在线播放| 亚洲国产精品yw在线观看| 经典三级在线| 久久久精品在线| √8天堂资源地址中文在线| 欧美在线激情网| 福利视频一区| 成人av蜜桃| 国产日韩欧美一区二区三区| 在线观看成人av| 一区福利视频| 亚洲免费看av| 国产成人亚洲精品狼色在线| 美国黄色a级片| 国产精品久久久久久久久晋中| 久久精品视频日本| 欧美探花视频资源| 亚洲国产精品久久久久久久| 日韩精品中文字幕在线观看| 国产在线激情| 日本免费久久高清视频| 国产精品一区二区三区四区在线观看 | 久久精品人人爽| 97人澡人人添人人爽欧美| 国产精品免费在线免费 | 亚洲黄在线观看| 香蕉视频免费在线播放| 久久久久久免费精品| 国产91在线播放精品| 精品无人区一区二区三区竹菊| 成人动漫免费在线观看| 国产一级爱c视频| 国产一区二区视频在线| 在线免费观看黄色小视频| 亚洲人成在线播放网站岛国 | av手机在线观看| 91久久国产婷婷一区二区| 神马电影久久| 99久久国产综合精品五月天喷水| 捆绑调教一区二区三区| 青青草视频成人| 亚洲自拍与偷拍| 97久久人国产精品婷婷| 亚洲一品av免费观看| 2019中文字幕在线电影免费 | 538任你躁在线精品免费| 99re这里只有精品首页| 一区视频免费观看| 欧美日韩久久一区二区| 精彩国产在线| 欧美一性一乱一交一视频| 成人直播在线观看| mm131午夜| 激情国产一区二区| 中文字幕黄色网址| 色欧美日韩亚洲| 青青国产在线| 97av在线视频免费播放| 97久久亚洲| 亚洲国产一二三精品无码| 麻豆成人91精品二区三区| 国产又粗又猛又爽又黄av| 欧美日韩一区二区免费在线观看| 色婷婷av一区二区三| 欧美国产极速在线| 久久精品一级| 一区二区三区日韩视频| 国内精品视频一区二区三区八戒| 特黄一区二区三区| 精品视频123区在线观看| 国产一级片在线播放| 日韩av片永久免费网站| 天堂成人娱乐在线视频免费播放网站| 黄色大片中文字幕| 北条麻妃一区二区三区| 国产一二三四在线| 亚洲精品在线观看视频| rebdb初裸写真在线观看| 精品无人区一区二区三区竹菊| 99热在线精品观看| 亚洲最大免费视频| 欧美性极品xxxx做受| 理论在线观看| 国产精品一二三视频| 91欧美在线| 91亚洲一区二区| 亚洲一区二区三区在线| 欧美一区,二区| 国产91精品青草社区| 久久不卡国产精品一区二区 | 亚洲视频资源| 国产日韩欧美大片| 成人网页在线观看| 成人免费视频毛片| 在线播放国产精品| 成人97精品毛片免费看| 国产91沈先生在线播放| 99免费精品视频| 最近中文字幕免费观看| 俺去了亚洲欧美日韩| 精品一区二区三区四区五区 | 欧美高清视频一区二区三区| 欧美大片一区二区三区| 忘忧草在线日韩www影院| 亚洲高清123| 国产高清在线精品| 丰满少妇xoxoxo视频| 久久精品美女视频网站| 精品女人视频| mm131亚洲精品| 亚洲一区二区三区精品在线| 欧美扣逼视频| 91精品在线观看视频| 国产视频一区欧美| 色偷偷www8888| 日韩激情第一页| 中文字幕综合| 黄色免费福利视频| 亚洲欧美综合网| 青青青草原在线| 91日本在线观看| 久久天天综合| 欧美成人免费观看视频| 亚洲人成在线观看网站高清| 欧美经典一区| 国产成人av影视| 亚洲成人tv网| 成人黄色网址| 日韩免费三级| 不卡一区在线观看| 999精品国产| 国产精品美女久久久久久免费| 影音先锋国产精品|