Python引用配置文件

在写数据库运维脚本时,会涉及到很多数据库的运维,如果将脚本放到数据库服务器上,就只针对一个数据库来使用,但如果想在一台设备上去管理所有数据库,那么就需要去设计这个脚本的通用性。

看很多软件,实际上都会有一个配置文件,可以将一些数据库信息、通用信息都放在配置文件中,然后再去调用。

常规的配置文件格式包括.ini,.toml,.yaml等。

从网上的评价来看,用.ini.toml的比较多,主要是这两种较为简单,使用起来也方便。

python的第三方包有:

  • Configparser,用于操作INI文件,操作方便
  • toml,用于操作toml文件,实际上就是通过字典的方式来操作。

TOML和INI文件格式的区别

  • toml中变量值支持多种格式,ini中默认为字符串格式。
  • toml中字符串必须加引号,单引号,双引号都可以,ini中字符串不加引号.
  • toml中只能使用key=value形式,ini中可以使用key=valuekey : value形式.
  • toml中只支持#号注释,可以写到变量值后,也可以独占一行,ini文件中支持;#注释,一般要独占一行。
  • toml中支持字段嵌套,ini不支持。
  • toml中的选项(变量名)大小写敏感,如host,ini中选项(变量名),大小写不敏感

通过最近一段时间的使用,发现configparser有个小问题,如果同时读取多个文件时,那么在修改保存的时候,保存的文件会复制其他文件的内容。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#########这是配置文件
# a文件
[week]
today='fri'
tomorrow='sat'

# b文件
[year]
dragon='2024'
snake='2025'

如下文件,我们用configparser读了两个配置文件,然后修改配置文件a.ini,那么保存后会发现b.ini中的信息也保存到a.ini中了。

1
2
3
4
5
6
7
8
9
from configparser import ConfigParser

conf=ConfigParser()
conf.read(['a.ini','b.ini'])
print(conf.sections())  #打印所有选项

conf.set('week','today','mon')
with open('a.ini','w') as f:
    conf.write(f)

image-20240412230151908

这种功能不是我想要的,因此我想到了toml来实现。

toml的修改操作不如ConfigParser,因此如果是静态参数配置文件,那么toml更适合,如果是需要根据运行情况不断去修改参数值的,则ConfigParser更好。

updatedupdated2024-04-122024-04-12