Python-ConfigParser-ini配置文件

本文最后更新于:2021年1月25日 下午

信息

这是一个用来管理配置文件的库
一般用来管理.ini配置文件(Windows下的配置文件)

不太推荐用这个东西,问题较多,感觉还不如直接json

文档

官方文档:https://docs.python.org/3/library/configparser.html

概念

.ini.conf配置文件,他们大概长这样:

1
2
3
4
5
6
7
8
9
10
11
[db]
db_host = 127.0.0.1
db_port = 69
db_user = root
db_pass = root
host_port = 69
is_ok = True

[concurrent]
thread = 10
processor = 20

Section

上面的[db],[concurrent]之类的就是section
内容一般用[]来包裹,表示一块相对独立的配置块

Options

上面的db_host = 127.0.0.1db_port = 69之类的就是Options
这是配置的本体,以Key-Value的形式保存着

使用入门

这个东西的用法很像dict
如果遇到什么想要进行的dict本身又提供函数的操作,可以试试看能不能用

读取

初始化ConfigParser对象

1
2
3
>>>import configparser
>>>config = configparser.ConfigParser()
>>>config.read("ini", encoding="utf-8")

查询

获取Section节点

1
2
3
4
>>>print(config.sections())
['db', 'concurrent']
>>>print(config['db'])
['db', 'concurrent']

从Section中获取Options

1
2
3
4
>>>config.options("db")
['db_host', 'db_port', 'db_user', 'db_pass', 'host_port']
>>>list(config['db'].keys())
['db_host', 'db_port', 'db_user', 'db_pass', 'host_port']

获取Option的值

获取指定Option的值

1
2
3
4
5
6
7
8
9
10
>>>r = config.get("db", "db_host")
"127.0.0.1"
>>>r0 = config['db']['db_host']
"127.0.0.1"
>>>r1 = config.getint("db", "db_port") # 将获取到值转换为int型
69
>>>r2 = config.getboolean("db", "is_ok" ) # 将获取到值转换为bool型
True
>>>r3 = config.getfloat("db", "host_port" ) #将获取到值转换为浮点型
69.0

获取所有Option的值

1
2
3
4
>>>config.items("db")
[('db_host', '127.0.0.1'), ('db_port', '69'), ('db_user', 'root'), ('db_pass', 'root'), ('host_port', '69')]
>>>list(config['database-mongo'].items())
[('db_host', '127.0.0.1'), ('db_port', '69'), ('db_user', 'root'), ('db_pass', 'root'), ('host_port', '69')]

检测

检测是否有Section

1
2
3
4
>>>config.has_section("db")  # 是否存在该section
True
>>>'db' in config
True

检测是否有Option

1
2
3
4
>>>config.has_option("section", "option")
False
>>>"db_host" in config["db"]
True

修改/创建

创建Section

1
2
3
4
>>>config.add_section("new:section")
>>>config['new:section'] = {}
# 可以顺便赋值option
>>>config['new:section'] = {'o1': '1', 'o2': '2'}

修改/创建Option

修改某个option的值,如果不存在该option则会被创建

1
2
3
# db Section 的 db_port Option 的值为69
>>>config.set("db", "db_port", "69")
>>>config['db']["db_port"] = '69'

删除

删除Section

1
2
3
4
>>>config.pop('db')
>>>
>>>config['db'] = {} # 重新创建以供删除
>>>config.remove_section("default")

删除Option

1
2
3
4
>>>config.pop('db')
>>>
>>>config['db'] = {} # 重新创建以供删除
>>>config.remove_section("default")

持久化

1
2
with open('example.ini', 'w') as f:
config.write(f)

问题

关键词无法使用

有一些词在文件里是无法使用的,只要一访问带有这个词的Option就会报错
比如说 asctime
解决办法:

  1. 使用RawConfigParser而不是ConfigParser
  2. 把关键词删除

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!