ConfigParser写配置文件乱序问题
在Centos6.5的环境下,通常使用ConfigParser进行配置文件的解析。Centos6.5的Python版本为Python 2.6.6。对于一般的应用场景中配置文件的顺序没有那么的重要,但有些场景中配置文件的顺序是非常有效的,特别是当配置项的值具有覆盖功能时这种问题更加的严重。
以下面的例子为例进行说明:
<ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>[b]</li><li>y1 = 10</li><li>x2 = 20</li><li>z1 = 30</li><li></li><li>[a]</li><li>x2 = 40</li><li>z2 = 10</li><li>y1 = 10</li></ol>在Centos 6.5常用的配置文件解析方法如下:
[root@stcell03 test]# python
Python 2.6.6 (r266:84292, Nov 22 2013, 12:16:22)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import ConfigParser
>>> config = ConfigParser.ConfigParser()
>>> fp = open(r"/root/test/test.conf", "r")
>>> config.readfp(fp)
>>> sections = config.sections()
>>> print sections
['a', 'b']
>>>
具体代码如下所示
<ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>import ConfigParser<br /></li><li>config = ConfigParser.ConfigParser()<br /></li><li>fp = open(r"/root/test/ceph.conf", "r")<br /></li><li>config.readfp(fp)<br /></li><li>sections = config.sections()<br /></li><li>print sections</li></ol>通过上述的输出可知,配置文件的section顺序为b, a,而实际输出的section为a, b。对于一般场景下无所谓,但在包含的场景中,比如b是一个通用的配置,而a是一个特殊的配置,a的配置能够覆盖b中某些配置项的内容,此时就会出现问题。出现这种问题的根本原因是在ConfigParser中默认采用了dict保存解析到的数据,而dict本身是无序的,实际上是根据键值的顺序保存,因此出现了a,b的顺序。这样也就可能导致配置文件的乱序。
实际上根据官方的文档可知,可以设置ConfigParser的dict_type参数,改变对应的字典类型,从而解决这种序列问题。Changedinversion2.6:dict_typewasadded.
Changedinversion2.7:Thedefaultdict_typeiscollections.OrderedDict.allow_no_valuewasadded.经过测试在Python 2.7的版本中,配置文件不会出现乱序问题,因此可以在Python 2.6的版本中传递2.7的参数。如下所示:
[root@stcell03 test]# python
Python 2.6.6 (r266:84292, Nov 22 2013, 12:16:22)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import ConfigParser
>>> from collections import OrderedDict
>>> config = ConfigParser.ConfigParser(dict_type=OrderedDict)
>>> fp = open(r"/root/test/test.conf", "r")
>>> config.readfp(fp)
>>> sections = config.sections()
>>> print sections
['b', 'a']
>>>
具体代码如下:
<ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>import ConfigParser<br /></li><li>from collections import OrderedDict<br /></li><li>config = ConfigParser.ConfigParser(dict_type=OrderedDict)<br /></li><li>fp = open(r"/root/test/test.conf", "r")<br /></li><li>config.readfp(fp)<br /></li><li>sections = config.sections()<br /></li><li>print sections</li></ol>
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前By尊渡假赌尊渡假赌尊渡假赌
刺客信条阴影:贝壳谜语解决方案
2 周前ByDDD
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

SublimeText3汉化版
中文版,非常好用

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

Dreamweaver Mac版
视觉化网页开发工具

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具