如何使用python解析这个文件?

2024-07-05 14:10:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文件,里面有

[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中执行此操作?你知道吗


Tags: 文件对象nameinputifvartransformslope
3条回答

尝试:

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

您可以生成一个语法分析器,它可以通过BNF解析这个文件。使用Boson来做这个,Boson是一个轻量级的语法分析器生成器。你知道吗

Boson Github

我想你可以试试

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")  

但我误解了如何定义表达式,它只是一个字符串吗

相关问题 更多 >