我在谷歌上没有发现任何类似的东西,并且想知道是否有更快的方法来执行以下操作:
我需要解析用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将反对的文件行。
有没有比以正常文件读取配置文件并解析它更快的方法?我正在寻找可以做到这一点的图书馆。我不太介意这个库所使用的语言。
答案 0 :(得分:2)
我试图解决类似的问题。我将目录转换为JSON对象,以便我可以使用JSON对象以最简单的方式查询键。此解决方案适用于我的多级键值对。我
这是算法。
使用字符串或文件中的正则表达式找到config [" key_name"]。使用以下正则表达式
config(.*?)\\[(.*?)\\]
更换圆形支架(如果有)"()"方括号" []"和反斜杠" \"空白字符" "如下
expression.replace('(', '[')
.replace(')', ']')
.replace('\\', ' ')
JSONObject json =(JSONObject)parser.parse(expression)
这是您的JSON对象。您可以按照自己的方式使用它。
答案 1 :(得分:0)
试试Parboiled。它是用Java编写的,你也可以用Java编写语法。
使用堆栈存储元素等;它的解析器类是通用的,你可以从中获得最终结果。
答案 2 :(得分:0)
我知道这是一个老问题,但我找到了一个非常有用的Java here配置解析器库。
它提供了一个简单的函数getValue("sectionName", "optionName")
,允许您在一个部分中获取选项的值。
[sectionName]
optionName = optionValue