我有一个包含
等内容的文件[Input:1]
Name=Feature1
Transform=Linear
Slope=1
Intercept=0
[Input:4]
Name=Feature2
Transform=Linear
Slope=1
Intercept=0
[Input:2]
Expression=( if ( > Var 10000000) ( - Var 10000000) ( + Var 10000000))
Transform=Freeform
[Input:3]
Transform=FreeForm
Expression=(if (> Var2 1) Var2 0)
Slope=1
Intercept=0
我需要创建一个对象列表,每个对象包含上面给出的字段。因此[输入:1]将对应于对象1,将有4个变量作为名称,变换,斜率和截距给出。该字段的值(以字符串形式)为" Feature1"," Linear"," 1"和" 0"分别。请注意,每个对象可以具有不同的字段。我如何在python中执行此操作?
答案 0 :(得分:1)
尝试:
try:
# Python 2
import ConfigParser as cfgp
except:
# Python 3
import configparser as cfgp
class MyObject:
def __getitem__(self, attr):
return getattr(self, attr)
conf = cfgp.ConfigParser()
conf.optionxform = str
conf.read('sample.cfg')
objects = []
for section in conf.sections():
obj = MyObject()
for field, value in conf.items(section):
setattr(obj, field, value)
objects.append(obj)
然后,您可以通过以下方式获取字段值:
for obj in objects:
print(obj.Transform) # or obj.Name, etc
print(obj['Transform']) # or obj['Name'], etc
答案 1 :(得分:0)
我想你可以尝试配置
import ConfigParser
conf = ConfigParser.ConfigParser()
conf.read("test.cfg")
sections = conf.sections()
print 'sections:', sections #sections: ['sec_b', 'sec_a']
options = conf.options("Input:1")
但我误解了如何定义Expression,它只是一个字符串
答案 2 :(得分:0)
您可以生成一个语法分析器,可以通过BNF解析该文件。使用Boson来做这件事,Boson是一个轻量级语法分析器生成器。