Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中,如何导入lua文件中定义的变量?_Python_Lua - Fatal编程技术网

在Python中,如何导入lua文件中定义的变量?

在Python中,如何导入lua文件中定义的变量?,python,lua,Python,Lua,我有一些lua文件需要用Python阅读。我希望能够导入变量(主要是表) LUA文件的示例: print("lua display text") Civs = { CIVILIZATION_EGYPT = { -- lua comment 1 Playable = true, SpawnYear = -3000, StartX = 75, StartY = 32, Table = {

我有一些lua文件需要用Python阅读。我希望能够导入变量(主要是表)

LUA文件的示例:

print("lua display text")

Civs = { 
    CIVILIZATION_EGYPT = { -- lua comment 1
        Playable = true,
        SpawnYear = -3000,
        StartX = 75,
        StartY = 32,
        Table = { },
        Text = "abc",
        TableTable = { {"a"}, {"b"}, {"c"}, {"d"}, {}, {}, {}},
    };
    CIVILIZATION_INDIA = { 
        Playable = true,
        SpawnYear = -3000,
        StartX = 98,
        StartY = 42,
        Table = { },
        Text = "abc",
        TableTable = { {"a"}, {"b"}, {"c"}, {"d"}, {}, {}, {}},
    };
    CIVILIZATION_BABYLON = {
        Playable = true,
        SpawnYear = -3000,
        StartX = 84,
        StartY = 41,
        Table = { },
        Text = "abc",
        TableTable = { {"a"}, {"b"}, {"c"}, {"d"}, {}, {}, {}},
     }
}
-- lua comment 2


如果只定义了变量,我想我可以直接导入该文件,它将作为python运行。但也有一些注释甚至打印命令导致此操作失败。

  • 从Python读取文件,并将变量解析为Python变量

  • 在Lua中序列化这些变量,并在Python中反序列化它们

  • 使用自定义Lua解释器执行该代码,然后通过pythonapi提供该数据


如果您希望自动执行此操作,第二种方法将要求您解析Lua代码并注入自己的代码,以便可以序列化变量。因此,您可以使用第一种方法。

“如果只定义了变量,我想我可以导入该文件,它将以python的形式运行”嗯,不?您必须编写一个理解lua语法的解析器。如果您可以使用lua读取您的lua文件,然后将其导出为JSON,那么就更容易了。JSON看起来确实是这里最好的选择,只想提到这个库:从python调用lua(不知道它工作得有多好)@juanpa.arrivillaga no确实:-)谢谢,我只想到了第三个选项。但我认为第一种选择(如果我理解正确,即逐行阅读)意味着每次修改文件结构时都要维护和更新解析器,这是我不想做的。选择第三种选择。