在lua中搜索包含特定字符串的键

时间:2013-04-16 15:02:16

标签: python lua lua-table

我有多个lua文件,其中包含我想通过Python提取的信息。要在Python中使用Lua我正在使用lunatic-python,但这不是必需的 - 如果你有其他方法也可以。

lua文件看起来像这样:

source = {
    licences = {
        "GPL",
        "MIT",
    },
    env = {
        MYTOOL_VERSION = "1.2.3",
        OTHER_KEY = "OTHER_VALUE",
    },
    some_other_keys = {
        ...
    },
}

我感兴趣的价值是source.env.MYTOOL_VERSION,而MYTOOL总是不同的。由于我没有lua的经验,我不知道如何告诉它“获取包含字符串VERSION”的键的值。我在Lua中阅读了一些关于tables概念的教程(这对我来说似乎有点奇怪),我想函数nextpairs对我的情况可能有用。虽然这些函数仍然让我感到困惑,但在我发现的例子中我总是将它们用在循环中,但当我做这样的事情时:

x = next(source.env)

而不是

k, v = next(source.env)

似乎x现在只包含密钥,而不是值。使用pairs代替next时,我会得到一个函数,但我不知道如何调用它。

我的Pythonscript目前看起来像这样:

import lua

with open(project_path) as f:
    script = f.read()

lua.execute(script)

i = 1

licences = []

while True:
    data = lua.globals().source.licences[i]
    if data is None:
        break
    licences.append(data)
    i += 1

version = lua.eval('source.env[next(source.env)]') if lua.globals().source.env is not None else 'unkown',

只能获得env表中任何键的值,而不一定是包含VERSION的值。

那么,获取此文件所需数据以与Python一起使用的优雅解决方案是什么?

1 个答案:

答案 0 :(得分:2)

如果您执行此脚本

function version(t)
    for k,v in pairs(t) do
        if k:match"._VERSION$" then return v end
    end
end

然后评估version(source.env),我希望它能为你返回1.2.3