我的配置文件中有这样的东西(包含字符串列表的配置选项):
[filters]
filtersToCheck = ['foo', '192.168.1.2', 'barbaz']
是否有更优雅的(内置)方法从filtersToCheck获取列表而不是删除括号,单引号,空格然后使用split()
来执行此操作?也许是一个不同的模块?
(使用python3。)
答案 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))]