3

我在 Google 上没有找到任何此类内容,想知道是否有更快的方法来执行以下操作:

我需要解析用 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 反对的文件行。

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

4

3 回答 3

2

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

这是算法。

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

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

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

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

这是您的 JSON 对象。你可以按照你想要的方式使用它。

于 2015-01-16T12:22:38.807 回答
0

试试煮熟的。它是用 Java 编写的,您也可以用 Java 编写语法。

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

于 2013-06-14T08:53:52.250 回答
0

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

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

[sectionName] optionName = optionValue

于 2016-05-26T15:59:02.240 回答