一文帶你梳理Python中七種配置文件的常見用法
在寫 Python 項(xiàng)目的時(shí)候,最讓人頭大的環(huán)節(jié)之一,就是配置文件。
你肯定遇到過:
- 模型訓(xùn)練路徑要配置;
- API Key 要配置;
- 數(shù)據(jù)庫(kù)連接參數(shù)要配置;
- 生產(chǎn)環(huán)境、測(cè)試環(huán)境的參數(shù)還得區(qū)分……
結(jié)果就是:項(xiàng)目寫著寫著,光是管理配置文件就快把人逼瘋。
更扎心的是,不同的項(xiàng)目,配置文件格式還五花八門——有人用 .ini,有人用 .json,有人推崇 .yaml,還有 .toml、.env、.xml,甚至直接用 .py 文件來寫。
那么問題來了:到底該用哪種?它們有什么區(qū)別?在 Python 里怎么讀寫?
別急,這篇文章我會(huì)把 7 種常見的配置方式一次性說清楚,代碼實(shí)戰(zhàn)全給你備好,照著用就行。
一、為什么配置文件這么重要
在項(xiàng)目開發(fā)里,配置文件就像“遙控器”。 你不可能把所有參數(shù)寫死在代碼里吧? 那樣一旦換服務(wù)器、換數(shù)據(jù)庫(kù)、換模型路徑,改動(dòng)起來簡(jiǎn)直要命。
有了配置文件,就像把遙控器交給你:
- 想改參數(shù),直接改配置,不用動(dòng)核心代碼;
- 想?yún)^(qū)分測(cè)試環(huán)境和生產(chǎn)環(huán)境?復(fù)制兩份配置文件就行;
- 想分享項(xiàng)目?把敏感信息放進(jìn)
.env,別人拿到項(xiàng)目后只要改一改配置,就能跑起來。
所以,配置文件的格式選擇,其實(shí)決定了你的項(xiàng)目可維護(hù)性和擴(kuò)展性。
二、常見配置格式橫向?qū)Ρ?/h2>
咱們先來個(gè)總覽,心里有數(shù):
| 格式 | 可讀性 | 復(fù)雜度 | 安全性 | 類型支持 | 適用場(chǎng)景 |
|---|---|---|---|---|---|
| INI | 高 | 低 | 高 | 基礎(chǔ)類型 | 簡(jiǎn)單分組配置 |
| JSON | 中 | 中 | 高 | 豐富 | 跨語(yǔ)言、數(shù)據(jù)交換 |
| YAML | 高 | 高 | 中 | 豐富 | 復(fù)雜配置,帶注釋 |
| XML | 低 | 高 | 高 | 豐富 | 企業(yè)級(jí)規(guī)范 |
| .env | 高 | 低 | 高 | 字符串 | 環(huán)境變量、敏感信息 |
| TOML | 高 | 中 | 高 | 豐富 | Python 項(xiàng)目常用 |
| Python 文件 | 中 | 高 | 低 | 完全支持 | 框架級(jí)、動(dòng)態(tài)配置 |
一張表看下來,基本思路就出來了:
- 簡(jiǎn)單粗暴用 INI;
- 要跨語(yǔ)言、交換數(shù)據(jù)用 JSON;
- 想要人類友好 + 注釋能力強(qiáng),就上 YAML;
- 如果你是企業(yè)項(xiàng)目、偏 Java 系,可能用 XML;
- 需要管理敏感信息, .env 幾乎是標(biāo)配;
- TOML 是 Python 項(xiàng)目的新寵,兼顧簡(jiǎn)潔和結(jié)構(gòu);
- 框架配置動(dòng)不動(dòng)就是
.py文件(比如 Django),那是特殊情況。
下面我們就一一拆解,看它們?cè)?Python 里怎么用。
三、七種方式逐個(gè)過
1. INI 文件 —— 老牌選手
INI 文件最大的優(yōu)點(diǎn)就是:簡(jiǎn)單、直觀、Python 原生支持。 標(biāo)準(zhǔn)庫(kù)里有 configparser,拿來就用。
import configparser
def handle_ini_file():
# 寫INI文件
config = configparser.ConfigParser()
config['DEFAULT'] = {
'ServerAliveInterval': '45',
'Compression': 'yes',
'CompressionLevel': '9'
}
config['bitbucket.org'] = {}
config['bitbucket.org']['User'] = 'hg'
config['topsecret.server.com'] = {}
topsecret = config['topsecret.server.com']
topsecret['Port'] = '50022'
topsecret['ForwardX11'] = 'no'
# 寫入文件
with open('myconfig.ini', 'w') as f:
config.write(f)
# 讀取INI文件
config_read = configparser.ConfigParser()
config_read.read('myconfig.ini')
print("INI文件內(nèi)容:")
print(f"ServerAliveInterval: {config_read['DEFAULT']['ServerAliveInterval']}")
print(f"bitbucket User: {config_read.get('bitbucket.org', 'User')}")
print(f"Port: {config_read.getint('topsecret.server.com', 'Port')}")
print(f"ForwardX11: {config_read.getboolean('topsecret.server.com', 'ForwardX11')}")
適合場(chǎng)景:配置比較簡(jiǎn)單,不需要嵌套。
2. JSON 文件 —— 跨語(yǔ)言通吃
幾乎所有語(yǔ)言都支持 JSON,這就是它的殺手锏。 Python 里用 json 模塊,一行搞定。
import json
def handle_json_file():
data = {
"name": "John",
"age": 30,
"city": "New York",
"is_student": False,
"hobbies": ["reading", "gaming", "hiking"],
"address": {
"street": "123 Main St",
"zipcode": "10001"
}
}
# 寫JSON
with open('myconfig.json', 'w') as f:
json.dump(data, f, indent=4)
# 讀JSON
with open('myconfig.json', 'r') as f:
data_read = json.load(f)
print("JSON文件內(nèi)容:")
print(f"Name: {data_read['name']}")
print(f"Age: {data_read['age']}")
print(f"Hobbies: {', '.join(data_read['hobbies'])}")
print(f"Zipcode: {data_read['address']['zipcode']}")
適合場(chǎng)景:需要和別的語(yǔ)言/程序交互的數(shù)據(jù)交換。
3. YAML 文件 —— 人類最友好的配置
YAML 近幾年在 Python 圈特別火,優(yōu)點(diǎn)就是:簡(jiǎn)潔,還能寫注釋! 不過要裝 pyyaml,標(biāo)準(zhǔn)庫(kù)沒帶。
import yaml
def handle_yaml_file():
data = {
"name": "Alice",
"age": 25,
"city": "London",
"is_student": True,
"hobbies": ["painting", "dancing"],
"address": {
"street": "456 Oak Ave",
"zipcode": "SW1A 1AA"
}
}
# 寫YAML
with open('myconfig.yaml', 'w') as f:
yaml.dump(data, f, sort_keys=False)
# 讀YAML
with open('myconfig.yaml', 'r') as f:
data_read = yaml.safe_load(f)
print("YAML文件內(nèi)容:")
print(f"Name: {data_read['name']}")
print(f"Age: {data_read['age']}")
print(f"Hobbies: {', '.join(data_read['hobbies'])}")
print(f"Zipcode: {data_read['address']['zipcode']}")
適合場(chǎng)景:復(fù)雜項(xiàng)目,需要手動(dòng)編輯、加注釋。
4. TOML 文件 —— Python 官方推薦
TOML 是近年來火起來的,它的設(shè)計(jì)初衷就是做配置。 Python 官方文檔里推薦用它。
import toml
# 寫入TOML
data = {
"title": "TOML config",
"owner": {
"name": "Tom Preston-Werner",
"dob": "1979-05-27T07:32:00-08:00"
},
"database": {
"server": "192.168.1.1",
"ports": [8001, 8001, 8002]
}
}
with open("config.toml", "w") as f:
toml.dump(data, f)
# 讀取TOML
with open("config.toml", "r") as f:
config = toml.load(f)
print('toml配置信息:', config["database"]["server"])
適合場(chǎng)景:現(xiàn)代 Python 項(xiàng)目,結(jié)構(gòu)化又簡(jiǎn)潔。
5. XML 文件 —— 老派企業(yè)最愛
XML 在 Java 生態(tài)里非常常見,Python 里用得少,主要是寫法太啰嗦。
import xml.etree.ElementTree as ET
# 寫XML
root = ET.Element("config")
server = ET.SubElement(root, "server")
ET.SubElement(server, "host").text = "localhost"
ET.SubElement(server, "port").text = "8080"
tree = ET.ElementTree(root)
tree.write("config.xml")
# 讀XML
tree = ET.parse("config.xml")
root = tree.getroot()
host = root.find("server/host").text
port = root.find("server/port").text
print(host)
print('端口', port)
適合場(chǎng)景:企業(yè)級(jí)規(guī)范,或者要和 Java 系統(tǒng)打交道時(shí)。
6. 環(huán)境變量(.env 文件)—— 敏感信息守護(hù)者
密碼、API Key、數(shù)據(jù)庫(kù) URL 這些東西,最適合放 .env。 配合 python-dotenv,特別方便。
from dotenv import load_dotenv
import os
# 加載.env
load_dotenv()
# 讀取環(huán)境變量
api_key = os.getenv("API_KEY")
database_url = os.getenv("DATABASE_URL")
print('apikey:', api_key)
print('Url:', database_url)
適合場(chǎng)景:存儲(chǔ)敏感配置,環(huán)境變量管理。
7. Python 文件 —— 直接上本尊
有些框架直接用 .py 做配置(Django 就是)。 靈活性最高,但也意味著安全性和維護(hù)性要小心。
# settings.py
DEBUG = True
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'mydatabase'
}
}
適合場(chǎng)景:框架內(nèi)部、動(dòng)態(tài)計(jì)算配置。
四、怎么選
一句話總結(jié):
- 快速小項(xiàng)目:INI
- 要交換數(shù)據(jù):JSON
- 人類友好:YAML
- Python 新項(xiàng)目:TOML
- 敏感信息:.env
- 企業(yè)/老系統(tǒng):XML
- 框架內(nèi)置:.py
大多數(shù)情況下,YAML + TOML + .env 足夠覆蓋絕大多數(shù) Python 項(xiàng)目需求。
五、最后的話
別小看配置文件,它決定了你的項(xiàng)目是不是“優(yōu)雅”。 如果配置亂七八糟,項(xiàng)目就會(huì)越來越臃腫,哪怕代碼寫得再漂亮,也會(huì)被坑到。
所以,學(xué)會(huì)正確地管理配置,其實(shí)就是在給未來的自己減負(fù)。
到此這篇關(guān)于一文帶你梳理Python中七種配置文件的常見用法的文章就介紹到這了,更多相關(guān)Python配置文件用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決Django中修改js css文件但瀏覽器無法及時(shí)與之改變的問題
今天小編就為大家分享一篇解決Django中修改js css文件但瀏覽器無法及時(shí)與之改變的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-08-08
python opencv 找出圖像中的最大輪廓并填充(生成mask)
這篇文章主要介紹了python opencv 找出圖像中的最大輪廓并填充(生成mask),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
Python基于Tkinter實(shí)現(xiàn)的記事本實(shí)例
這篇文章主要介紹了Python基于Tkinter實(shí)現(xiàn)的記事本,實(shí)例分析了Tkinter實(shí)現(xiàn)記事本程序的相關(guān)技巧,需要的朋友可以參考下2015-06-06
python?web?開發(fā)之Flask中間件與請(qǐng)求處理鉤子的最佳實(shí)踐
Flask作為輕量級(jí)Web框架,提供了靈活的請(qǐng)求處理機(jī)制,中間件和請(qǐng)求鉤子允許開發(fā)者在請(qǐng)求處理的不同階段插入自定義邏輯,實(shí)現(xiàn)諸如身份驗(yàn)證、日志記錄、數(shù)據(jù)預(yù)處理等功能,本文將詳細(xì)介紹Flask的請(qǐng)求處理鉤子、g對(duì)象以及中間件模式的使用方法和最佳實(shí)踐,感興趣的朋友一起看看吧2025-05-05
簡(jiǎn)單介紹使用Python解析并修改XML文檔的方法
這篇文章主要介紹了使用Python解析并修改XML文檔的方法,是Python入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-10-10

