首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

关于python修改配置文件。该如何处理

2012-02-26 
关于python修改配置文件。我用python的ConfigParser修改配置文件功能会修改原有配置文件里的配置顺序。不知

关于python修改配置文件。
我用python的ConfigParser修改配置文件功能会修改原有配置文件里的配置顺序。
不知道怎么解决,请赐教。
注:脚本运行在linux下。

[解决办法]
修改ConfigParser源代码,或者不要用.ini作为配置文件。

还可以用iniparse,参看:http://www.okpython.com/bbs/thread-3224-1-2.html
[解决办法]
试试 configobj

http://www.voidspace.org.uk/python/configobj.html
[解决办法]
e.g.,

$ cat test.ini 
[db]
db_pass=test
db_host=127.0.0.1

[usage]
cpu=2


#--------- your python ConfigObj parser--------
from configobj import ConfigObj
config = ConfigObj('test.ini')
config['db']['db_pass'] = 'hello' 
config.filename = 'new.ini'
config.write()
[解决办法]
python2.6的ConfigParser没能保持原有配置顺序,是因为ConfigParser默认dict不是有序的
参考python3.1的OrderedDict实现,大致这样
from UserDict import UserDict
class OrderDict(dict):
def __init__(self, *args, **kwds):
if len(args) > 1:
raise TypeError('expected at most 1 arguments, got %d' % len(args))
try:
self.__root
except AttributeError:
self.__map = {}
self.update(*args, **kwds)
self._keys = []

def __setitem__(self, key, item):
dict.__setitem__(self, key, item)
if key not in self._keys: self._keys.append(key)

def keys(self):
return self._keys

def items(self):
return zip(self._keys, self.values())

config = ConfigParser.ConfigParser(None,OrderDict)
如此应该可以保持原有的顺序,当然细节上还要调整。
[解决办法]

探讨
python2.6的ConfigParser没能保持原有配置顺序,是因为ConfigParser默认dict不是有序的
参考python3.1的OrderedDict实现,大致这样

热点排行