解析Java程序的Python配置文件

时间:2013-06-14 08:50:57

标签: java python parsing config

我在谷歌上没有发现任何类似的东西,并且想知道是否有更快的方法来执行以下操作:

我需要解析用Python编写的Java程序的构建脚本。更具体地说,我想解析硬编码到这些构建脚本中的字典。

例如,这些脚本包含以下条目:

config = {}

config["Project"] = \
    {
        "Name"                          : "ProjName",
        "Version"                       : "v2",
        "MinimumPreviousVersion"        : "v1",
    }   

def actualCode ():
# Some code that actually compiles the relevant files

(实际编译是通过调用另一个程序完成的,这个脚本只设置了我想要提取的必需选项)。 例如,我想提取“Name”=“ProjName”等等。

我知道ConfigParser库是Python的一部分,但是它是为.ini文件设计的,因此存在问题(抛出异常和崩溃)和实际的python代码,这些代码可能出现在我正在讨论的构建脚本中。因此,使用此库意味着我首先必须读取该文件并删除ConfigParser将反对的文件行。

有没有比以正常文件读取配置文件并解析它更快的方法?我正在寻找可以做到这一点的图书馆。我不太介意这个库所使用的语言。

3 个答案:

答案 0 :(得分:2)

我试图解决类似的问题。我将目录转换为JSON对象,以便我可以使用JSON对象以最简单的方式查询键。此解决方案适用于我的多级键值对。我

这是算法。

  1. 使用字符串或文件中的正则表达式找到config [" key_name"]。使用以下正则表达式

    config(.*?)\\[(.*?)\\]

  2. 将大括号内的数据转换为字符串。使用一些基于堆栈的代码,因为在复杂目录中可能存在类型为{}或[]的嵌套括号。
  3. 更换圆形支架(如果有)"()"方括号" []"和反斜杠" \"空白字符" "如下

      expression.replace('(', '[')
      .replace(')', ']')
      .replace('\\', ' ')
    
  4. JSONObject json =(JSONObject)parser.parse(expression)

  5. 这是您的JSON对象。您可以按照自己的方式使用它。

答案 1 :(得分:0)

试试Parboiled。它是用Java编写的,你也可以用Java编写语法。

使用堆栈存储元素等;它的解析器类是通用的,你可以从中获得最终结果。

答案 2 :(得分:0)

我知道这是一个老问题,但我找到了一个非常有用的Java here配置解析器库。

它提供了一个简单的函数getValue("sectionName", "optionName"),允许您在一个部分中获取选项的值。

[sectionName] optionName = optionValue