好的我打算使用configparser模块创建一些ini配置文件,但我遇到了一些麻烦。
如何将配置的某些部分写入不同的ini文件?
我已经阅读了所有关于它的官方文档,似乎没有看到任何允许这样做的内容。
有什么建议吗?
答案 0 :(得分:2)
您可以定义其中一个ConfigParser
类的子类,并覆盖其write
方法。例如:
class MySafeConfigParser(ConfigParser.SafeConfigParser):
def write(self, fileobject, *sections):
'Write an .ini-format representation of the specified sections'
temp = ConfigParser.SafeConfigParser(self.defaults())
for s in sections:
temp.add_section(s)
for i, v in self.items(s):
temp.set(s, i, v)
temp.write(fileobject)
我可以用这样的东西来测试我的子类:
config = MySafeConfigParser({ 'foo': '5.0' })
config.add_section('Section1')
config.set('Section1', 'foo', '3.1415')
config.set('Section1', 'bar', 'baz')
config.add_section('Section2')
config.set('Section2', 'abc', 'def')
config.set('Section2', 'ghi', 'jkl')
config.add_section('Section3')
config.set('Section3', 'mno', 'pqr')
config.set('Section3', 'stu', 'vwx')
with open('section1.ini', 'wb') as f:
config.write(f, 'Section1')
with open('sections2and3.ini', 'wb') as f:
config.write(f, 'Section2', 'Section3')
运行此代码后,文件section1.ini
包含:
[DEFAULT]
foo = 5.0
[Section1]
foo = 3.1415
bar = baz
和sections2and3.ini
包含:
[DEFAULT]
foo = 5.0
[Section2]
foo = 5.0
abc = def
ghi = jkl
[Section3]
foo = 5.0
mno = pqr
stu = vwx
最重要的是,ConfigParser.read(...)
方法已经接受了多个文件名,因此我可以重新读取这两个配置文件:
config = MySafeConfigParser()
config.read(['section1.ini', 'sections2and3.ini'])
编辑:我错过了最初的问题是询问Python 3,所以这里的代码转换为Python 3:
class MySafeConfigParser(configparser.ConfigParser):
def write(self, fileobject, *sections, space_around_delimiters = True):
'Write an .ini-format representation of the specified sections'
temp = configparser.ConfigParser(self.defaults())
for s in sections:
temp.add_section(s)
for i, v in self.items(s):
temp.set(s, i, v)
temp.write(fileobject, space_around_delimiters)
测试代码转换为Python 3:
config = MySafeConfigParser({ 'foo': '5.0' })
config['Section1'] = {}
config['Section1']['foo'] = '3.1415'
config['Section1']['bar'] = 'baz'
config['Section2'] = {}
config['Section2']['abc'] = 'def'
config['Section2']['ghi'] = 'jkl'
config['Section3'] = {}
config['Section3']['mno'] = 'pqr'
config['Section3']['stu'] = 'vwx'
with open('section1.ini', 'w') as f:
config.write(f, 'Section1')
with open('sections2and3.ini', 'w') as f:
config.write(f, 'Section2', 'Section3')