【python】INI 文件详解及python读写方法

INI 文件是一种经典的配置文件格式,常用于存储程序的参数配置。以下是 ​INI 文件的结构说明及 ​Python 读写 INI 文件的完整方法,包含代码示例和注意事项。


INI 文件结构

基本规则

  1. 节(Section)​:用方括号 [section_name] 表示,用于逻辑分组配置项。
  2. 键值对(Key-Value)​:格式为 key = value,等号两侧的空格可选。
  3. 注释:以 ; 或 # 开头,用于解释配置内容。
  4. 数据类型:值默认为字符串,需根据需求手动转换类型(如整数、布尔值等)。

示例文件 config.ini

; 数据库配置
[database]
host = localhost
port = 3306
username = admin
password = 123456
enabled = true  ; 是否启用

[logging]
level = DEBUG
path = /var/log/app.log

Python 读取 INI 文件

使用内置库 configparser(Python 3+ 中为 configparser,Python 2 中为 ConfigParser)。

1. 读取配置

import configparser

# 创建解析器对象
config = configparser.ConfigParser()

# 读取文件
config.read('config.ini')

# 获取所有节(section)
sections = config.sections()  # 输出: ['database', 'logging']

# 获取某个节下的所有键
keys = config.options('database')  # 输出: ['host', 'port', 'username', 'password', 'enabled']

# 获取键值(自动处理数据类型)
host = config.get('database', 'host')          # 输出: 'localhost'
port = config.getint('database', 'port')       # 输出: 3306
enabled = config.getboolean('database', 'enabled')  # 输出: True

# 获取整个节的键值对(字典形式)
db_config = dict(config.items('database'))
# 输出: {'host': 'localhost', 'port': '3306', 'username': 'admin', ...}

2. 处理键不存在的情况

# 使用 fallback 提供默认值
timeout = config.getint('network', 'timeout', fallback=30)  # 若键不存在,返回30

# 捕获异常
try:
    value = config.get('nonexistent_section', 'key')
except (configparser.NoSectionError, configparser.NoOptionError) as e:
    print(f"错误: {e}")

Python 写入 INI 文件

1. 修改或新增配置

import configparser

config = configparser.ConfigParser()

# 添加或修改节和键值对
config['database'] = {
    'host': '192.168.1.100',
    'port': '3306',
    'timeout': '30',  # 注意:值必须为字符串
    'enabled': 'true'
}

# 添加新节
config.add_section('network')
config.set('network', 'retries', '3')

# 写入文件(覆盖原有内容)
with open('config.ini', 'w') as f:
    config.write(f)

2. 保留原有结构(避免覆盖注释)​

默认 configparser 会丢失注释和格式,若需保留原始结构,需手动处理或使用第三方库(如 configobj)。


完整读写示例

import configparser

# 读取配置
config = configparser.ConfigParser()
config.read('config.ini')

# 修改数据库主机地址
config.set('database', 'host', '10.0.0.1')

# 新增超时参数
if not config.has_option('database', 'timeout'):
    config.set('database', 'timeout', '60')

# 删除日志路径
if config.has_option('logging', 'path'):
    config.remove_option('logging', 'path')

# 写入新文件
with open('new_config.ini', 'w') as f:
    config.write(f)

注意事项

  1. 数据类型:写入时所有值必须为字符串,读取时使用 getint()/getboolean() 转换。
  2. 大小写敏感:默认不敏感(键名会被转为小写),可通过 ConfigParser(allow_no_value=True, strict=False) 调整。
  3. 保留注释configparser 不支持保留注释,需使用其他库(如 configobj)处理。
  4. 文件路径:建议使用绝对路径,避免因工作目录不同导致文件找不到。

替代方案

  • 复杂配置:使用 JSON/YAML(json 或 pyyaml 库)。
  • 环境变量:使用 python-dotenv 读取 .env 文件。

通过 configparser,可以高效管理简单配置,适合轻量级应用场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浩瀚之水_csdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值