INI 文件由「节(section)」、「键值对(key=value)」和「注释」组成:
# 这是注释(以 # 或 ; 开头)
; 这也是注释
[DEFAULT]# 特殊节:所有节默认继承此节的键值对
encoding = utf-8
timeout = 30
[database]# 节名(区分大小写)
host = localhost
port = 3306
user = root
password = 123456
db_name = test_db
[log]
level = INFO
path = /var/log/app.logconfigparser 读取 INI 文件import configparser
config = configparser.ConfigParser()
config.read("config.ini", encoding="utf-8") # 支持多个文件,编码可选
sections = config.sections()
print(sections) # 输出:['database', 'log'](不包含 DEFAULT 节)# 检查节是否存在
has_db = config.has_section("database")
print(has_db) # 输出:True
# 检查键是否存在(需指定节)
has_host = config.has_option("database", "host")
print(has_host) # 输出:True# 方法 1:section.get(key)
host = config["database"].get("host")
print(host) # 输出:localhost
# 方法 2:config.get(section, key)
port = config.get("database", "port")
print(port) # 输出:3306(默认返回字符串)port = config.getint("database", "port")
print(port, type(port))
# 输出:3306 <class 'int'>
# 布尔值(支持 yes/no, on/off, true/false, 1/0)
is_debug = config.getboolean("log", "debug", fallback=False)
# fallback 为默认值
# 浮点数
timeout = config.getfloat("DEFAULT", "timeout")
print(timeout, type(timeout))
# 输出:30.0 <class 'float'># 获取指定节的所有键值对(返回字典)
db_config = dict(config["database"])
print(db_config)
# 输出:{'host': 'localhost', 'port': '3306', 'user': 'root', ...}
# 获取所有键名
db_keys = config["database"].keys()import configparser
config = configparser.ConfigParser()
config.read("config.ini", encoding="utf-8")
# 1. 添加新节
ifnot config.has_section("app"):
config.add_section("app")
# 2. 设置键值对
config.set("app", "name", "my_app") # 字符串值
config.set("app", "version", "1.0.0")
# 3. 修改已有值
config.set("database", "port", "3307") # 注意:值需为字符串
# 4. 保存到文件
withopen("config.ini", "w", encoding="utf-8") as f:
config.write(f) # 写入时会保留原有注释吗?不会,会重建文件⚠️ 注意:config.write() 会覆盖原文件,且不会保留注释 不注意会有坑
read() 加载文件 → get()/getint() 等读取值 → set() 修改 → write() 保存。#Python #配置文件