商城首页欢迎来到中国正版软件门户

您的位置:首页 >Python使用configparser模块解析ini文件的方法步骤

Python使用configparser模块解析ini文件的方法步骤

  发布于2026-05-20 阅读(0)

扫一扫,手机访问

在Python项目里,配置文件是绕不开的一环。而INI文件,以其结构清晰、简单易读的特点,至今仍是许多开发者的首选格式。今天,我们就来深入聊聊,如何用Python标准库中的configparser模块,优雅地驾驭这种配置文件。

Python使用configparser模块解析ini文件的方法步骤

1. INI文件格式简介

在动手写代码之前,先得搞清楚INI文件长什么样。它的结构非常直观,主要由两部分构成:节(section)键值对(key-value)

[Section1]
key1 = value1
key2 = value2

[Section2]
key3 = value3

简单拆解一下:

  • 节(Section):用方括号[SectionName]包裹,作用是把相关的配置项归到一组,方便管理。
  • 键值对(Key-Value):格式就是key = value,等号(或冒号)两边可以有空格。
  • 注释:以#;开头的行,会被视为注释,解析器通常会忽略它们。

2. 使用configparser模块

好消息是,Python已经内置了处理INI文件的利器——configparser模块,这意味着你无需安装任何额外包,开箱即用。

它的基本操作流程,可以概括为下面几个步骤:

第一步,导入模块

import configparser

第二步,创建解析器对象

config = configparser.ConfigParser()

第三步,读取INI文件

config.read('config.ini')  # 这个方法会返回一个成功读取的文件名列表

第四步,访问你需要的配置项

value = config.get('Section1', 'key1')  # 获取到的value是字符串类型

3. 常用方法

掌握了基本流程,我们来看看configparser都提供了哪些实用的方法。

读取操作

想了解配置文件的全貌?这几个方法很常用:

# 获取文件中所有的节(section)
sections = config.sections()

# 获取某个节下面所有的键(key)
keys = config.options('Section1')

# 获取某个节下面所有的键值对,以元组列表的形式返回
items = config.items('Section1')  # 结果类似:[('key1', 'value1'), ('key2', 'value2')]

配置文件里经常不只有字符串,还有数字、布尔值。直接获取并转换类型,能省去你手动转换的麻烦:

value_int = config.getint('Section1', 'key1')
value_float = config.getfloat('Section1', 'key2')
value_bool = config.getboolean('Section2', 'key3')

在读取之前先检查一下节或键是否存在,是个好习惯,可以避免程序因配置项缺失而崩溃:

has_section = config.has_section('Section1')
has_key = config.has_option('Section1', 'key1')

写入操作

除了读,动态修改或创建配置文件也是常见需求。

# 添加一个新的节
config.add_section('NewSection')
# 在指定节下设置或修改一个键值对
config.set('NewSection', 'new_key', 'new_value')

# 删除一个键
config.remove_option('Section1', 'key1')
# 删除整个节(注意,这会同时删除该节下的所有键)
config.remove_section('Section1')

# 最后,别忘了把修改写回文件
with open('new_config.ini', 'w') as f:
    config.write(f)

4. 处理默认值

有时候,我们希望为某些配置项提供一个“保底”的默认值。configparser提供了两种思路:

一种是在初始化解析器时,通过defaults参数设置一个默认节(名字就叫DEFAULT),所有其他节在查找键时,如果找不到,都会去这里找。

另一种更灵活的方式,是在调用get方法时直接指定一个回退值(fallback):

value = config.get('Section1', 'key1', fallback="default_value")
# 如果'Section1'节里没有'key1',那么value就会被赋值为"default_value"

5. 高级配置

ConfigParser的构造函数提供了一些参数,让你可以微调它的行为,以适应不同格式的INI文件:

config = configparser.ConfigParser(
    allow_no_value=True,   # 允许键没有对应的值(比如有些配置项只起开关作用)
    delimiters=('=', ':'), # 指定哪些字符可以作为键和值之间的分隔符
    comment_prefixes=('#', ';'),  # 指定哪些字符表示注释
    strict=False  # 设为False可以容忍重复的节或键(不报错),True则会严格检查
)

6. 示例代码

理论说再多,不如看两段实际的代码来得直观。

读取并打印配置

import configparser

config = configparser.ConfigParser()
config.read('config.ini')

for section in config.sections():
    print(f'[{section}]')
    for key, value in config.items(section):
        print(f'{key} = {value}')

修改并保存配置

# 假设我们已经读取了config.ini
config.set('Section1', 'key1', 'updated_value')  # 修改现有值
config.add_section('NewSection')  # 新增一个节
config.set('NewSection', 'new_key', '123')  # 在新节下添加配置

# 将修改后的配置写入一个新文件
with open('updated_config.ini', 'w') as f:
    config.write(f)

7. 注意事项

最后,有几个细节需要你留意,它们可能会在实际使用中带来一些小“惊喜”:

  • 大小写敏感问题:默认情况下,configparser会把所有的键名都转换成小写。也就是说,配置文件里的ServerPort和代码里写的serverport会被认为是同一个键。如果你需要保持大小写,可以通过config = configparser.ConfigParser(converters={})来禁用转换器。
  • 注释无法保留:一个常见的遗憾是,configparser在读取文件时会忽略注释,写入时也不会保留原有的注释格式。如果你的配置文件注释很重要,可以考虑使用configobj这类第三方库。
  • 文件编码:模块默认使用系统的本地编码来读写文件。为了跨平台兼容性,更稳妥的做法是使用open函数并显式指定编码(如utf-8)来读取文件内容,再交给解析器处理。

总的来说,对于绝大多数标准的INI文件读写需求,Python自带的configparser模块已经足够强大和便捷。当然,如果你的配置结构异常复杂,比如需要嵌套节或者更严格的类型验证,那么了解一下configobj或者转向更现代的toml格式,也是不错的选择。

本文转载于:https://www.jb51.net/python/364131bws.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注