Python解析配置文件模块:ConfigPhaser

算是前几周落下的博客补一篇。介绍一下python中如何解析配置文件。配置文件常用的几种格式:xml,json,还有ini。其中ini算是最简单的一种格式,因为小,解析的速度也要比xml和json快(并没有科学的数据支撑,只是我个人想法)。当然,我并不是说xml和json不好,只是有时候只想在文件里写点配置的话,还是ini比较小巧。好了废话不多说,来讲解一下python中处理ini配置文件的类ConfigPhaser。

一般来讲,一个ini配置文件里,格式是酱婶的:

[SectionA]   # 方括号里叫做一个section
a = aa       # 这里的每一行,等号左侧是一个option,右侧是option的value
b = bb
c = cc

[SectionB]
optionint = 1
optionfloat = 1.1
optionstring = string

就这么简单(配置文件是没有注释的,不要乱写,否则读的时候会出错。xml和json也一样)。

用python读取配置文件的时候,也是非常简单的:

1 with open(filename, 'r') as fr:
2     cfg = ConfigParser.ConfigParser()
3     cfg.readfp(fr)

这就读好了。下面的工作就是解析cfg。

1 # 读取所有sections:
2 secs = cfg.sections()         # ['SectionA', 'SectionB']

结果得到section的列表。

1 # 读取某一个section里面的所有options
2 ops0 = cfg.options(secs[0])      # ['a', 'b', 'c']

结果得到所有options的列表。

可是解析配置文件的目的并不是获得option,而是获得option和value的键值对呀!——直接使用items就好了:

1 ops1 = cfg.items(secs[1])

猜猜print ops1的时候会获得什么?嗯,是的,你猜错了。并不是一个字典,而是一个列表:

[('optionint', '1'), ('optionfloat', '1.1'), ('optionstring', 'string')]

希望把它当做字典来用的话,需要dict(ops1)

当我只想获得某一个option的值怎么办呢?不想一下子读那么多数据的话,可以用一系列get的方法:

1 print cfg.getint(secs[1], 'optionint')  # 1
2 print cfg.getfloat(secs[1], 'optionfloat')  # 1.1
3 print cfg.get(secs[1], 'optionstring')  # string

其实在类的内部实现中,getint和getfloat也只是在get上又封装了一层。

这就是ConfigPhaser模块的简单用法。然而这个模块并不只是能简单的读取配置文件,还可以动态的添加内容哟~酱婶的:

1 cfg.add_section('SectionC')             # 添加section
2 cfg.set('SectionC', 'ex', 'example')    # 添加option及value

或者删除配置:

1 cfg.remove_option('SectionC', 'ex')
2 cfg.remove_section('SectionC')

之后

1 with open(filename, 'w') as fw:
2     cfg.write(fw)

这样就把配置写回到配置文件里去了。要注意的是,读取配置文件和写配置文件最好分别进行,不要一个文件既读又写。首先,cfg读取的时候用read,这就要求文件一定要用r/r+/a的方式读才行,但是r不能写,r+和a只能在结尾追加,这样cfg在用write写文件的时候,就会把原来的配置再写到配置文件里去,而不是覆盖方式。

大概就酱。so easy吧。不敢说完全弄清楚了这个配置文件类,但是基本用法这些大概就够用了。

PS:配置文件的名字,可以不用ini做后缀。随便什么都行,你高兴就好。

2016.03.07更新:有同学反映ConfigPhaser不支持多线程读写。感觉多线程读肯定没问题,至于写,本身写文件就是一件需要很仔细的事,尽量还是不要多线程的好。只是,如果控制好同步,应该也可以的吧。谁有空的时候可以测试一下,我是不太想研究这个了。本来就是一个不愿意踩坑的人,明知是雷区就应该尽量绕过去而不是蹚过去不是吗?

转载于:https://www.cnblogs.com/anpengapple/p/5095133.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值