常用配置文件及读取方法
在 Python 程序中,配置文件的常用格式有 .ini
、.yaml
、.json
和 .toml
,这些文件格式各有优缺点,适合不同的场景。下面逐一介绍这些格式及相应的读取库和优点:
1. .ini
文件
- 库:Python 标准库
configparser
- 结构:
.ini
文件使用键值对的结构,并支持使用不同的段(sections)来组织数据,例如[section_name]
。 - 优点:
- 简单直观,适合存储简单的配置信息。
- 支持分区的分层结构,便于逻辑上的划分。
- Python 标准库自带
configparser
,无需额外安装第三方库。
适用场景: .ini
文件适合简单、层级较少的配置信息,适合小型应用程序的基本配置需求。
示例:
[database]
host = localhost
port = 3306
user = root
password = example
读取方式:
import configparser
config = configparser.ConfigParser()
config.read('config.ini')
host = config['database']['host']
2. .yaml
文件
- 库:
PyYAML
- 结构:
.yaml
支持更复杂的结构,包括字典、列表、嵌套等,可以表示多层次的配置。 - 优点:
- 语法简洁,可读性好,适合存储结构化的数据。
- 支持复杂的嵌套和列表,非常灵活。
- 通常用于配置需求较复杂的项目,如微服务配置、CI/CD 配置等。
适用场景:.yaml
常用于需要表达复杂数据结构的配置文件,例如包含多层次、多字段的配置需求。
示例:
database:
host: localhost
port: 3306
user: root
password: example
读取方式:
import yaml
with open('config.yaml', 'r') as f:
config = yaml.safe_load(f)
host = config['database']['host']
3. .json
文件
- 库:Python 标准库
json
- 结构:JSON 格式采用键值对的结构,并支持嵌套的字典和列表,结构相对清晰。
- 优点:
- 广泛应用于 Web 应用和 API 配置,兼容性好。
- 使用 Python 标准库
json
,无需额外依赖。 - 解析速度快,适合数据量较大的配置文件。
适用场景:.json
常用于 Web 应用或接口配置,特别是需要与其他系统交互时。
示例:
{
"database": {
"host": "localhost",
"port": 3306,
"user": "root",
"password": "example"
}
}
读取方式:
import json
with open('config.json', 'r') as f:
config = json.load(f)
host = config['database']['host']
4. .toml
文件
- 库:
toml
(Python 官方推荐库)但从python3.11开始,已经内置库(tomllib)支持了。 - 结构:
.toml
文件类似于.ini
文件,支持多级嵌套和数组,格式上更现代。 - 优点:
- 语法简洁易读,专门用于配置文件,非常适合用来表达多层次结构的数据。
- 多数情况下比
.yaml
和.json
更清晰,尤其适合项目依赖或小型应用配置。 - 已成为 Python 的官方推荐配置文件格式,尤其在 Python 项目依赖管理(如 Poetry)中广泛应用。
适用场景:.toml
文件特别适合 Python 应用程序的配置需求,尤其是在结构不复杂时更具优势。
示例:
[database]
host = "localhost"
port = 3306
user = "root"
password = "example"
读取方式:
import toml
config = toml.load('config.toml')
host = config['database']['host']
python3.11内置库读取:
import tomllib
with open("config.toml", "rb") as f:
config = tomllib.load(f)
# 获取excel文件路径
EXCEL_FILEPATH = config['EXCEL_FILEPATH']
BANK_STATEMENT_SHEET = config['BANK_STATEMENT_SHEET']
CUSTOMER_INFO_SHEET = config['CUSTOMER_INFO_SHEET']
AGING_REPORT_SHEET = config['AGING_REPORT_SHEET']
INVOICE_DATA_SHEET = config['INVOICE_DATA_SHEET']
LOG_LEVEL = config['LOG_LEVEL']
各格式对比总结
格式 | 优点 | 缺点 | 推荐场景 |
---|---|---|---|
.ini |
简单直观,支持分区,标准库支持 | 结构简单,不支持复杂嵌套 | 小型应用的简单配置 |
.yaml |
语法简洁,支持复杂结构 | 需要安装第三方库,解析速度略慢 | 需要嵌套或多层次结构的复杂配置 |
.json |
兼容性好,解析速度快,标准库支持 | 可读性不如 YAML,缺少注释支持 | Web 配置或需要跨系统传输的应用 |
.toml |
简洁现代,适合多级嵌套,官方推荐 | 支持度不如 JSON 和 YAML | Python 应用程序和依赖管理配置 |
根据项目需求选择合适的格式,能更好地管理和读取配置文件。