如何使用python解析此文件?

时间:2016-10-18 03:23:04

标签: python parsing text

我有一个包含

等内容的文件
[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中执行此操作?

3 个答案:

答案 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是一个轻量级语法分析器生成器。

Boson Github