python操作ini类型配置文件的实例教程

1. 概述

ini格式配置文件是一种比较常用的配置文件格式,类似于Windows的ini文件。Python提供了一种标准库 configparser 可以很方便的实现对ini文件的读写操作。

2. configparser库介绍

configparser是Python内置库,无需安装。在Python3中,configparser库已经被重命名为configparser ,在Python2中,可以使用ConfigParser,使用方法基本相同。

2.1 configparser库方法

configparser库提供了三个主要类:

ConfigParser:用于读取和写入INI文件。

SectionProxy:代表ini文件中的段落(section),可读写参数(option)。

Interpolation:处理字符串插值,即用户在字符串中输入变量。

接下来,我们以一个ini文件的读取和写入操作来示范configparser库的使用,同时使用Python中的logging模块来记录日志信息。

3. configparser库的使用

3.1 读取配置文件

使用 ConfigParser 类中的 read() 方法可以读取配置文件的内容。read() 方法中需要传递配置文件名。

import configparser

import logging

logging.disable(logging.CRITICAL) # 禁用日志信息

config = configparser.ConfigParser()

config.read('config.ini')

logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')

logging.debug('Read config.ini file success!')

print(config.sections())

print(config.get('server', 'ip'))

print(config.getint('server', 'port'))

print(config.getboolean('server', 'debug'))

在这里,我们创建了一个 ConfigParser 对象,并使用 read()方法读取配置文件。通过 sections() 方法可以获取ini文件中的全部段落名, get() 方法可以获取指定段落下的参数值,包括 getint()、getfloat()、getboolean()三种数据类型。

3.2 写入配置文件

文件的写入操作要更复杂一些,需要判断文件是否存在,如果不存在则需要创建文件。另一方面,在写入数据时,需要根据配置文件的格式,确定写入时采用的文件格式并保证合法。比如,要确保每个参数都位于将要写入的段落内。

import configparser

config = configparser.ConfigParser()

config['server'] = {'IP':'127.0.0.1',

'Port':'8080',

'Debug':'True'}

config['database'] = {}

config['database']['User'] = 'root'

config['database']['Password'] = '12345'

with open('config.ini', 'w') as f:

config.write(f)

在这里,我们创建了一个 ConfigParser 对象,并手动创建了两个节点[server], [database]。在节点中定义了多个参数,包括IP、Port、Debug、User、Password。对于新写入的节点和参数,一定要保证在写入前先进行对应的创建。同时,文件写入是通过 Python 的 IO 操作完成的。

4. configparser库的高级特性

4.1 Interpolation

从 python3.2 开始,configparser 库支持内置插值。这意味着可以在配置文件中使用预定义的变量来引用先前定义的值。

import configparser

config = configparser.ConfigParser()

config['settings'] = {'DEBUG': True}

config['path'] = {

'home_path': '/home/user',

'log_path': '%(home_path)s/logs',

}

print(config['path']['log_path'])

这里,我们在[path]段使用了%(home_path)s的形式表示引用了配置文件中[path]节点中的参数home_path,输出为/home/user/logs

4.2 多行字符串

与其他Python代码一样,你也可以使用三重引号来定义多行字符串(multiline strings)。

import configparser

config = configparser.ConfigParser()

config['myapp'] = {

'db': """database_name

{

user: 'myuser'

password: 'mypassword'

server: 'database_server'

port: '1081'

}""",

}

print(config['myapp']['db'])

这里,我们在[myapp]段中使用db参数来存储多行字符串。

4.3 默认值

configparser 库提供了默认值选项。假设配置文件中缺少某个必需的参数,就可以使用默认值作为替代。

如果为 get() 方法的第三个参数指定一个默认值,那么如果该项在配置文件中不存在,就会使用它。

import configparser

config = configparser.ConfigParser()

config.read('config.ini')

print(config.get('defaults', 'server_port', fallback="1234"))

这里我们在fallback参数中设置了默认值1234,如果读取server_port失败,就输出1234

4.4 修改配置

configparser 库还提供了修改配置文件的相关方法,主要是相关节点、关键参数增删改查操作。

import configparser

config = configparser.ConfigParser()

config.read('config.ini')

config['defaults']['server_port'] = "8000"

with open('config.ini', 'w') as configfile:

config.write(configfile)

print(config['defaults']['server_port'])

在这里,我们读取了本地的配置文件,并对[defaults]中的server_port参数进行修改,设置为8000。接着通过 open() 方法打开文件,使用 write() 方法将修改后的配置文件内容写入到文件中。

5. 总结

Python中configparser库的应用可以方便读取和写入ini格式的配置文件,对于开发中的一些常规参数配置十分适用,同时通过高级特性的使用,可以使用预定义的变量来引用先前定义的值,以及使用默认值替代一些必需参数等,达到快速配置文件的目的。

后端开发标签