一文帶你梳理Python中七種配置文件的常見用法
在寫 Python 項目的時候,最讓人頭大的環(huán)節(jié)之一,就是配置文件。
你肯定遇到過:
- 模型訓練路徑要配置;
- API Key 要配置;
- 數(shù)據(jù)庫連接參數(shù)要配置;
- 生產環(huán)境、測試環(huán)境的參數(shù)還得區(qū)分……
結果就是:項目寫著寫著,光是管理配置文件就快把人逼瘋。
更扎心的是,不同的項目,配置文件格式還五花八門——有人用 .ini,有人用 .json,有人推崇 .yaml,還有 .toml、.env、.xml,甚至直接用 .py 文件來寫。
那么問題來了:到底該用哪種?它們有什么區(qū)別?在 Python 里怎么讀寫?
別急,這篇文章我會把 7 種常見的配置方式一次性說清楚,代碼實戰(zhàn)全給你備好,照著用就行。
一、為什么配置文件這么重要
在項目開發(fā)里,配置文件就像“遙控器”。 你不可能把所有參數(shù)寫死在代碼里吧? 那樣一旦換服務器、換數(shù)據(jù)庫、換模型路徑,改動起來簡直要命。
有了配置文件,就像把遙控器交給你:
- 想改參數(shù),直接改配置,不用動核心代碼;
- 想區(qū)分測試環(huán)境和生產環(huán)境?復制兩份配置文件就行;
- 想分享項目?把敏感信息放進
.env,別人拿到項目后只要改一改配置,就能跑起來。
所以,配置文件的格式選擇,其實決定了你的項目可維護性和擴展性。
二、常見配置格式橫向對比
咱們先來個總覽,心里有數(shù):
| 格式 | 可讀性 | 復雜度 | 安全性 | 類型支持 | 適用場景 |
|---|---|---|---|---|---|
| INI | 高 | 低 | 高 | 基礎類型 | 簡單分組配置 |
| JSON | 中 | 中 | 高 | 豐富 | 跨語言、數(shù)據(jù)交換 |
| YAML | 高 | 高 | 中 | 豐富 | 復雜配置,帶注釋 |
| XML | 低 | 高 | 高 | 豐富 | 企業(yè)級規(guī)范 |
| .env | 高 | 低 | 高 | 字符串 | 環(huán)境變量、敏感信息 |
| TOML | 高 | 中 | 高 | 豐富 | Python 項目常用 |
| Python 文件 | 中 | 高 | 低 | 完全支持 | 框架級、動態(tài)配置 |
一張表看下來,基本思路就出來了:
- 簡單粗暴用 INI;
- 要跨語言、交換數(shù)據(jù)用 JSON;
- 想要人類友好 + 注釋能力強,就上 YAML;
- 如果你是企業(yè)項目、偏 Java 系,可能用 XML;
- 需要管理敏感信息, .env 幾乎是標配;
- TOML 是 Python 項目的新寵,兼顧簡潔和結構;
- 框架配置動不動就是
.py文件(比如 Django),那是特殊情況。
下面我們就一一拆解,看它們在 Python 里怎么用。
三、七種方式逐個過
1. INI 文件 —— 老牌選手
INI 文件最大的優(yōu)點就是:簡單、直觀、Python 原生支持。 標準庫里有 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文件內容:")
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')}")
適合場景:配置比較簡單,不需要嵌套。
2. JSON 文件 —— 跨語言通吃
幾乎所有語言都支持 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文件內容:")
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']}")
適合場景:需要和別的語言/程序交互的數(shù)據(jù)交換。
3. YAML 文件 —— 人類最友好的配置
YAML 近幾年在 Python 圈特別火,優(yōu)點就是:簡潔,還能寫注釋! 不過要裝 pyyaml,標準庫沒帶。
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文件內容:")
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']}")
適合場景:復雜項目,需要手動編輯、加注釋。
4. TOML 文件 —— Python 官方推薦
TOML 是近年來火起來的,它的設計初衷就是做配置。 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"])
適合場景:現(xiàn)代 Python 項目,結構化又簡潔。
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)
適合場景:企業(yè)級規(guī)范,或者要和 Java 系統(tǒng)打交道時。
6. 環(huán)境變量(.env 文件)—— 敏感信息守護者
密碼、API Key、數(shù)據(jù)庫 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)
適合場景:存儲敏感配置,環(huán)境變量管理。
7. Python 文件 —— 直接上本尊
有些框架直接用 .py 做配置(Django 就是)。 靈活性最高,但也意味著安全性和維護性要小心。
# settings.py
DEBUG = True
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'mydatabase'
}
}
適合場景:框架內部、動態(tài)計算配置。
四、怎么選
一句話總結:
- 快速小項目:INI
- 要交換數(shù)據(jù):JSON
- 人類友好:YAML
- Python 新項目:TOML
- 敏感信息:.env
- 企業(yè)/老系統(tǒng):XML
- 框架內置:.py
大多數(shù)情況下,YAML + TOML + .env 足夠覆蓋絕大多數(shù) Python 項目需求。
五、最后的話
別小看配置文件,它決定了你的項目是不是“優(yōu)雅”。 如果配置亂七八糟,項目就會越來越臃腫,哪怕代碼寫得再漂亮,也會被坑到。
所以,學會正確地管理配置,其實就是在給未來的自己減負。
到此這篇關于一文帶你梳理Python中七種配置文件的常見用法的文章就介紹到這了,更多相關Python配置文件用法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
解決Django中修改js css文件但瀏覽器無法及時與之改變的問題
今天小編就為大家分享一篇解決Django中修改js css文件但瀏覽器無法及時與之改變的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08
python opencv 找出圖像中的最大輪廓并填充(生成mask)
這篇文章主要介紹了python opencv 找出圖像中的最大輪廓并填充(生成mask),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-03-03
python?web?開發(fā)之Flask中間件與請求處理鉤子的最佳實踐
Flask作為輕量級Web框架,提供了靈活的請求處理機制,中間件和請求鉤子允許開發(fā)者在請求處理的不同階段插入自定義邏輯,實現(xiàn)諸如身份驗證、日志記錄、數(shù)據(jù)預處理等功能,本文將詳細介紹Flask的請求處理鉤子、g對象以及中間件模式的使用方法和最佳實踐,感興趣的朋友一起看看吧2025-05-05

