【问题标题】:Parse Python Configuration File for Java Programs解析 Java 程序的 Python 配置文件
【发布时间】:2013-06-14 08:50:56
【问题描述】:

我在 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 反对的文件行。

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

【问题讨论】:

  • 你对字典的值和键有什么限制吗?如果所有键/值都是字符串,那么您可以很容易地用正则表达式解析内容。
  • @Bakuriu 构建脚本中不仅仅是字典(普通代码也是如此),我想从构建脚本中提取一些字典

标签: java python parsing config


【解决方案1】:

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

这是算法。

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

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

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

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

这是您的 JSON 对象。你可以随心所欲地使用它。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      [sectionName] optionName = optionValue

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-31
        • 1970-01-01
        • 2013-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-19
        • 2021-06-16
        相关资源
        最近更新 更多