使用ConfigParser从配置文件中获取列表

时间:2011-07-20 08:24:54

标签: python list python-3.x configuration-files configparser

我的配置文件中有这样的东西(包含字符串列表的配置选项):

[filters]
filtersToCheck = ['foo', '192.168.1.2', 'barbaz']

是否有更优雅的(内置)方法从filtersToCheck获取列表而不是删除括号,单引号,空格然后使用split()来执行此操作?也许是一个不同的模块?

(使用python3。)

3 个答案:

答案 0 :(得分:13)

您不能像配置文件的值中的列表一样使用python对象。但你可以将它们作为逗号分隔的值,一旦你得到它就做分裂

[filters]
filtersToCheck = foo,192.168.1.2,barbaz

并做

filtersToCheck = value.split(',')

另一种方法是当然,继承SafeConfigParser类并删除[和]并构建列表。你认为这很难看,但这是一个可行的解决方案。

第三种方法是使用Python模块作为配置文件。项目这样做。只需将filtersToCheck作为config.py模块中的变量,并使用list对象。这是一个干净的解决方案。有些人担心使用python文件作为配置文件(称之为安全隐患,这有点毫无根据的恐惧),但也有一些人认为用户应该编辑配置文件而不是用作配置文件的python文件。 / p>

答案 1 :(得分:2)

查看configobj

答案 2 :(得分:1)

ss = """a_string = 'something'
filtersToCheck = ['foo', '192.168.1.2', 'barbaz']
   a_tuple =      (145,'kolo',45)"""

import re
regx = re.compile('^ *([^= ]+) *= *(.+)',re.MULTILINE)


for mat in regx.finditer(ss):
    x = eval(mat.group(2))
    print 'name :',mat.group(1)
    print 'value:',x
    print 'type :',type(x)
    print

结果

name : a_string
value: something
type : <type 'str'>

name : filtersToCheck
value: ['foo', '192.168.1.2', 'barbaz']
type : <type 'list'>

name : a_tuple
value: (145, 'kolo', 45)
type : <type 'tuple'>

然后

li = [ (mat.group(1),eval(mat.group(2))) for mat in regx.finditer(ss)]
print li

结果

[('a_string', 'something'), ('filtersToCheck', ['foo', '192.168.1.2', 'barbaz']), ('a_tuple', (145, 'kolo', 45))]