configparserd读取ini文件

configparser.ConfigParser() 是 Python 中用于处理 INI 格式配置文件 的模块,适合管理程序的配置参数。以下是它的核心用法:


1. 配置文件格式(INI 文件示例)

假设配置文件 config.ini 内容如下:

[database]
host = localhost
port = 3306
user = root
password = secret
debug_mode = true

[paths]
data_dir = /var/data
log_file = app.log

2. 基本使用步骤

2.1 读取配置文件
import configparser

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

# 读取文件(需确保文件存在)
config.read('config.ini')

# 读取所有节(section)名称
sections = config.sections()  # 输出: ['database', 'paths']

2.2 获取配置值
# 获取某个节下的键值
host = config.get('database', 'host')        # 'localhost'
port = config.getint('database', 'port')     # 3306(自动转为整数)
debug = config.getboolean('database', 'debug_mode')  # True(转为布尔值)

# 类似字典的方式访问
data_dir = config['paths']['data_dir']       # '/var/data'

2.3 修改或添加配置
# 修改现有值
config.set('database', 'host', '192.168.1.100')

# 添加新节和键值
config.add_section('network')
config.set('network', 'timeout', '30')

# 保存更改到文件(覆盖原文件)
with open('config.ini', 'w') as f:
    config.write(f)

2.4 默认值与错误处理
# 安全获取值(键不存在时返回默认值)
max_retries = config.getint('database', 'max_retries', fallback=3)

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

3. 高级功能

3.1 类型转换方法
方法说明
get(section, key)返回字符串
getint(section, key)返回整数
getfloat(section, key)返回浮点数
getboolean(section, key)返回布尔值(支持 true/false, yes/no

3.2 检查配置是否存在
# 检查节是否存在
if 'database' in config:
    print("存在 database 节")

# 检查键是否存在
if 'host' in config['database']:
    print("存在 host 键")

3.3 合并多个配置文件
config.read(['config.ini', 'override.ini'])  # 后者优先级更高

4. 完整示例

import configparser

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

# 读取数据库配置
db_host = config.get('database', 'host')
db_port = config.getint('database', 'port')

# 修改日志路径
config.set('paths', 'log_file', '/tmp/new_app.log')

# 添加新配置
if not config.has_section('debug'):
    config.add_section('debug')
config.set('debug', 'verbose', 'false')

# 保存配置
with open('config.ini', 'w') as f:
    config.write(f)

5. 注意事项

  1. 文件编码:默认使用系统编码,若文件含中文,可指定编码:
    config.read('config.ini', encoding='utf-8')
    
  2. 键大小写敏感:默认键名不区分大小写HOSThost 视为相同)。
    若需区分大小写,创建时设置:
    config = configparser.ConfigParser(allow_no_value=True, strict=True)
    
  3. 保留原始格式:写入文件时,注释和空行会被清除。若需保留,需手动处理。

通过 configparser,可以轻松实现配置文件的读写和管理,非常适合需要灵活配置的应用场景。

以下是 configparser.ConfigParser() 的常用方法及使用场景,帮助你高效管理 INI 格式配置文件:


1. 核心方法分类

类别方法作用示例
读取配置read()读取配置文件config.read('config.ini')
get()获取字符串值config.get('section', 'key')
getint()获取整数值config.getint('db', 'port')
getfloat()获取浮点数值config.getfloat('metrics', 'ratio')
getboolean()获取布尔值config.getboolean('debug', 'enable')
写入配置add_section()添加新节(section)config.add_section('network')
set()设置或修改键值config.set('db', 'host', '10.0.0.1')
write()将配置写入文件with open('file', 'w') as f: config.write(f)
检查存在性has_section()检查节是否存在config.has_section('database')
has_option()检查键是否存在config.has_option('paths', 'log')
遍历配置sections()返回所有节的列表config.sections()['db', 'paths']
options()返回某节下所有键的列表config.options('db')['host', 'port']
items()返回某节下所有键值对的列表config.items('db')[('host', 'localhost'), ...]
默认值与容错get(..., fallback=...)键不存在时返回默认值config.get('db', 'timeout', fallback=5)
删除配置remove_section()删除整个节config.remove_section('old_section')
remove_option()删除某节下的键config.remove_option('db', 'password')

2. 关键方法详解

2.1 读取配置
import configparser

config = configparser.ConfigParser()
config.read('config.ini')  # 可接受列表读取多个文件,如 ['base.ini', 'override.ini']

# 获取值(自动处理类型)
host = config.get('database', 'host')
port = config.getint('database', 'port')
debug = config.getboolean('debug', 'enable', fallback=False)  # 默认值

2.2 修改与保存配置
# 添加新节和键值
if not config.has_section('network'):
    config.add_section('network')
config.set('network', 'timeout', '30')

# 删除配置
config.remove_option('database', 'password')

# 保存到文件(覆盖模式)
with open('new_config.ini', 'w') as f:
    config.write(f)

2.3 遍历所有配置
# 遍历所有节
for section in config.sections():
    print(f"[{section}]")
    # 遍历节下所有键值对
    for key, value in config.items(section):
        print(f"{key} = {value}")

2.4 错误处理
try:
    user = config.get('database', 'user')
except configparser.NoSectionError:
    print("节不存在!")
except configparser.NoOptionError:
    print("键不存在!")

3. 高级用法

3.1 默认值配置
# 创建带默认值的 ConfigParser
config = configparser.ConfigParser(defaults={'timeout': '10', 'retries': '3'})

# 读取时优先使用配置文件中的值,缺失时用默认值
timeout = config.getint('network', 'timeout')  # 若配置中无 timeout,返回 10

3.2 保留原始格式(注释和空格)

默认情况下,configparser 会丢弃注释和空格。如需保留,需自定义解析器:

class CustomConfigParser(configparser.ConfigParser):
    def __init__(self):
        super().__init__(allow_no_value=True)

    def optionxform(self, optionstr):
        return optionstr  # 保持键的大小写敏感

config = CustomConfigParser()
config.read('config.ini')

3.3 合并配置
config.read(['base.ini', 'override.ini'])  # 后者的配置覆盖前者

4. 示例配置文件

config.ini:

[database]
host = localhost  # 数据库地址
port = 3306
user = admin
password = 123456

[debug]
enable = yes

5. 注意事项

  • 键大小写:默认不区分大小写(HostHOST 视为相同)。
    若需区分,初始化时设置 configparser.ConfigParser(strict=True)
  • 文件编码:读取时指定编码(如 encoding='utf-8'),避免中文乱码。
  • 布尔值识别getboolean() 支持 true/false, yes/no, on/off, 1/0

掌握这些方法后,可以轻松实现配置文件的动态管理和复杂场景的适配!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值