【问题标题】:Search for a key in lua which contains a certain string在 lua 中搜索包含某个字符串的键
【发布时间】:2013-04-09 01:26:40
【问题描述】:

我有多个 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表中any键的值,不一定是包含VERSION的那个。

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

【问题讨论】:

    标签: python lua lua-table


    【解决方案1】:

    如果你执行这个脚本

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

    然后 eval version(source.env),我希望它会为您返回 1.2.3

    【讨论】:

      猜你喜欢
      • 2020-05-01
      • 2021-07-09
      • 2011-05-25
      • 2021-06-12
      • 2019-05-17
      • 2013-06-26
      • 2013-11-10
      • 1970-01-01
      • 2023-02-02
      相关资源
      最近更新 更多