7.1.9 配置文件的访问

在应用程序中通常使用配置文件定义一些参数。例如,数据库配置文件用于记录数据库的字符串连接、主机名、用户名、密码等信息。Windows的ini文件就是一种传统的配置文件,ini文件由多个块组成,每个块由有多个配置项组成。例如,创建以下mysqlconfig.ini文件,此文件记录了连接数据库MySQL的信息。


[Mysql]
uid = select id from user where name="root"
[DATABASE]
host =127.0.0.1
user = test
passwd = 123456
port = 3306
database = jxcia

其中每个方括号表示一个配置块,配置块下的多个赋值表达式就是配置项。Python标准库的configparser模块用于解析配置文件。ConfigParser模块的ConfigParser类可读取ini文件的内容。下面【例7-6】这段代码从ODBC.ini文件中读取每个配置块、配置项的标题和配置的内容。

【例7-6.py】


01   # 读配置文件
02   import configparser                             # 导入configparser模块
03   config = configparser.ConfigParser()
04   config.read("D:\\python例题源代码\\ch07code\\mysqlconfig.ini")
05   sections = config.sections()                  # 返回所有的配置块
06   print ("配置块:", sections)
07   m = config.options("DATABASE")               # 返回所有的配置项
08   print ("配置项:", m)
09   d = config.items("DATABASE")
10   print ("内容:", d)
11   # 根据配置块和配置项返回内容
12   host = config.get("DATABASE", "host")
13   print (host)
14   user = config.get("DATABASE", "user")
15    print (user)
16   passwd= config.get("DATABASE", "passwd")
17   print (passwd)
18   port = config.get("DATABASE", "port")
19   print (port)
20   database = config.get("DATABASE", "database")
21   print (database)

【代码说明】

·第3行代码创建1个ConfigParser对象config。

·第4行代码读取mysqlconfig.ini文件。

·第5行代码调用sections()返回配置块的标题。

·第6行代码输出配置块的标题。输出结果如下所示。


配置块: ['Mysql', 'DATABASE']

·第7行代码调用options()返回“DATABASE”块下各配置项的标题。

·第8行代码输出配置项的标题。输出结果如下所示。


配置项:['host', 'user', 'passwd', 'port', 'database']

·第9行代码调用items()返回“DATABASE”块下各配置项的内容。

·第10行代码输出配置项的内容。输出结果如下所示。


内容: [('host', '127.0.0.1'), ('user', 'test'), ('passwd', '123456'), ('port', '3306'), ('database', 'jxcia')]

·第12~21行代码调用get()方法分别获取“DATABASE”块下每个配置项的内容。

配置文件的写入操作也很简单。首先调用add_section()方法添加1个新的配置块,然后调用set()方法,设置配置项目,最后写入配置文件mysqlconfig.ini即可。下面通过【例7-7】的代码实现。

【例7-7.py】


01     # 写配置文件
02     import configparser
03     config = configparser.ConfigParser()
04     config.add_section("account")                       # 添加新的配置块
05     config.set("account", "username", "user1")         # 添加新的配置项
06     f = open("D:\\python例题源代码\\ch07code\\mysqlconfig.ini", "a+")
07     config.write(f)
08     f.close()

【代码说明】

·第4行代码调用add_section()添加配置块。

·第5行代码调用set()添加配置项,并设置其内容。

·第6行代码以“a+”模式打开文件mysqlconfig.ini,追加新的配置。

·第7行代码写配置文件。

配置文件的修改需要先读取mysqlconfig.ini文件,然后调用set()方法设置指定配置块下某个配置项的值,最后写入配置文件mysqlconfig.ini。下面【例7-8】这段代码在mysqlconfig.ini文件中修改了配置块“account”。

【例7-8.py】


01     # 修改配置文件
02     import configparser
03     config = configparser.ConfigParser()
04     config.read("D:\\python例题源代码\\ch07code\\mysqlconfig.ini")
05     config.set("account", "username","user2")          # 修改配置项
06     f = open("D:\\python例题源代码\\ch07code\\mysqlconfig.ini", "r+")
07     config.write(f)
08     f.close()

【代码说明】

·第4行代码读配置文件mysqlconfig。

·第5行代码调用set()修改“account”下的配置项“username”的值为“user2”。

·第6行代码以“r+”打开配置文件mysqlconfig.ini。

·第7行代码写配置文件。

如果要删除某个配置块,调用remove_section()方法,传递需要删除的配置块名作为参数。如果要删除指定配置块下的某个配置项,调用remove_option()方法,传递需要删除的配置块名和配置项名作为参数。下面【例7-9】这段代码先删除mysqlconfig.ini文件中配置项“username”,然后删除配置块“account”。

【例7-9.py】


01     # 删除配置文件
02     import configparser
03     config = configparser.ConfigParser()
04     config.read("D:\\python例题源代码\\ch07code\\mysqlconfig.ini")
05     config.remove_option("account", "usernme")          # 删除配置项
06     config.remove_section("account")                    # 删除配置块
07     f = open("D:\\python例题源代码\\ch07code\\mysqlconfig.ini", "w+")
08     config.write(f)
09     f.close()

【代码说明】

·第5行代码调用remove_option()删除“account”下的配置项“usernme”。

·第6行代码调用remove_section()删除“account”配置块。

·第7行代码以“w+”模式写配置文件。