关于我应该如何构建计划的建议

时间:2016-09-04 13:08:44

标签: python parsing

对于我试图设计的程序,我正在检查配置文件中是否存在某些条件。例如,该行中包含 ThisExists 行,或文件中存在 ThisIsFirst ,后面的文件后面是 ThisAlsoExists

我寻找一种可能在这种情况下使用的有效方法,但找不到任何方法。

我目前的想法基本上是每次我想检查条件时多次迭代文件。所以我会有功能:

def checkA(文件)

def checkB(文件)

。 。

对我而言,这似乎效率低下,因为我必须针对我想要检查的每个条件进行迭代。

最初我以为我可以迭代一次,检查每一行我想要验证的每个条件。但我不认为我能做到这一点,因为多行的条件一次需要有关多行的信息。

我概述了实现这一目标的唯一方法,还是有更有效的方法?

我想在下面提供一个例子。

def main():
    file = open(filename)
    result1 = checkA(file)
    result2 = checkB(file)

    """This is a single line check function"""
    def checkA(file)
        conditionExists = False
        for line in file:
            if(line == "SomeCondition"):
                 conditionExists = True
         return conditionExists

    """This is a multi line check function"""
    def checkB(file)
        conditionExists = False
        conditionStarted = False
        for line in file:
             if(line == "Start"):
                 conditionStarted = True
             elif(line == "End" and conditionStarted):
                  conditionExists = True
        return conditionExists

2 个答案:

答案 0 :(得分:1)

从软件工程的角度来看,您当前的方法具有一些很好的优势。这些函数的逻辑完全相互分离,可以单独调试和测试。每个单独功能的复杂性很低。这种方法允许您轻松地合并不具有并行结构的各种检查。

答案 1 :(得分:0)

如果可用的库(configparser等)不够,我可能会使用正则表达式。

list.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

        HashMap<String, String> song = new HashMap<String, String>();
        exe= exeList.get(position);

        title=exe.get(Mainactivity.E_TITLE);
        text=exe.get(Mainactivity.E_TEXT);
        img=exe.get(Mainactivity.E_IMG);

        Intent i1= new Intent(Mainactivity.this,New_ListActivity.class);

        i1.putExtra("one",title);
        i1.putExtra("two",text);
        i1.putExtra("three", img);

        startActivity(i1);
    }
}

这不是最友好的用户方法 - 特别是如果匹配条件很复杂 - 但我认为学习正则表达式的回报非常好。

xkcd告诉我们正则表达式可以是super powerproblem