鱼C论坛

 找回密码
 立即注册
查看: 1541|回复: 7

写个一个lua转换的 但是不好使

[复制链接]
发表于 2023-7-7 14:44:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
F5调试模式下,可以使用,但是编译了无法使用, 哪里有问题呢。
# pip install xlwt
# pip install lupa
# 导入xlwt模块,用于创建xls文件
import xlwt
import os
import lupa

# from lupa import LuaRuntime

lua = lupa.LuaRuntime(unpack_returned_tuples=True)

cfg_model_info = ["index", "id", "名称", "type", "类型", "sex", "dir", "hud_top", "blendmode", "stand_pos_x", "stand_pos_y",
                  "idle_interval",
                  "walk_interval", "run_interval", "attack_interval", "magic_interval", "die_interval",
                  "stuck_interval",
                  "sitdown_interval", "mining_interval", "born_interval", "showstand_interval", "ready_interval",
                  "changeshape_interval", "enlarge", "offsetx", "offsety", "closefx", "shadow"]

fileNameMap = {
    "cfg_model_info": cfg_model_info,
}

input("按下回车键开始...")
for file in os.listdir(os.getcwd()):
    if file.endswith('.lua'):
        fileName = file.split('.')[0]
        if fileName not in fileNameMap:
            print(file, "is not in fileNameMap")
            continue

        with open(file, 'r') as f:
            lua_code = f.read()
        lua_table = lua.execute(lua_code)

        # 不为空
        if not lua_table:
            print(file, "is empty")
            continue

        print("-------------开始转换-------------")
        print("-------------", file, "-------------")

        # 创建一个工作簿对象
        workbook = xlwt.Workbook()
        # 创建一个工作表对象
        worksheet = workbook.add_sheet(fileName)
        # 写入表头
        keys = fileNameMap[fileName]
        print("表头顺序\n", keys)
        for i, key in enumerate(keys):
            worksheet.write(0, i, key)
        # 写入数据,即值的内容
        for i, value in enumerate(lua_table.values()):
            for k, v in value.items():
                # 根据key获取索引
                if k not in keys:
                    continue
                index = keys.index(k)
                # 写
                worksheet.write(i + 1, index, v)
        # 保存xls文件
        workbook.save(fileName + '.xls')

input("完成!!!\n按下回车键继续...")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-7 14:45:30 | 显示全部楼层
您好!从您的代码来看,它主要用于将Lua文件转换为XLS文件。但是在编译后无法使用,可能需要检查一下环境和依赖库。请尝试以下步骤:

1. 确保您已正确安装  xlwt  和  lupa  库。您可以运行以下命令来安装它们:

   pip install xlwt
   pip install lupa
   

2. 确保您的操作系统和Python环境是兼容的。例如,如果您在Windows上使用Python 3.8或更高版本,可能需要安装Microsoft Visual C++ 14.0。您可以从这里下载并安装。

3. 检查您的代码中是否有语法错误,确保代码的缩进、变量和函数调用都正确。

4. 检查您的Lua文件是否符合预期的格式。代码需要Lua文件具有特定的键和值,如果文件不符合预期的格式,可能会导致问题。

5. 从命令行运行您的Python脚本,而不是从集成开发环境(IDE)运行。这有助于识别是否存在与IDE相关的问题。

如果您仍然遇到问题,请提供更多关于错误信息、操作系统和Python版本的详细信息,以便为您提供更具体的帮助。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-7 14:46:56 | 显示全部楼层
陶远航 发表于 2023-7-7 14:45
您好!从您的代码来看,它主要用于将Lua文件转换为XLS文件。但是在编译后无法使用,可能需要检查一下环境和 ...

帮我修复一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-7 14:47:01 | 显示全部楼层
陶远航 发表于 2023-7-7 14:45
您好!从您的代码来看,它主要用于将Lua文件转换为XLS文件。但是在编译后无法使用,可能需要检查一下环境和 ...

不同意GPT^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-7 14:48:01 From FishC Mobile | 显示全部楼层
歌者文明清理员 发表于 2023-7-7 14:47
不同意GPT^_^

metoo^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-7 15:00:35 | 显示全部楼层
这个脚本用来将Lua脚本转换为Excel文件。主要问题可能来自以下几个方面:

1. Lua文件路径:确保Lua文件是放在正确的路径下,也就是说,Python脚本应该在同一个目录下执行。如果Lua文件在其他地方,可能需要使用完整的文件路径。

2. Lua代码的语法:这个脚本假设Lua代码可以被成功解析并执行。如果Lua代码有语法错误,那么这可能会引发异常。

3. Lua代码的结果:这个脚本假设Lua代码执行后的结果是一个表格(也就是Python的字典)。如果Lua代码返回的不是表,那么在Python端可能会有问题。

4. 编译的问题:你提到在F5调试模式下可以使用,但是编译了无法使用。这可能是因为编译的环境和你的开发环境不一样。需要确保编译的环境中安装了所有必要的Python库(在这个例子中,是 xlwt 和 lupa )。

5. xls文件写入权限:确认运行此脚本的环境有权限在指定的文件夹中创建和写入xls文件。

针对上述问题,你可以尝试:

· 在运行此脚本之前,确保Lua文件位于正确的路径。
· 使用一个Lua代码检查器或者一个Lua IDE来验证Lua代码是否有语法错误。
· 确保Lua代码执行后返回的是一个表。
· 检查编译环境和开发环境,确保它们都有安装必要的Python库。
· 检查运行环境对xls文件的写入权限。

希望这个答案对你有所帮助!如果还有其他问题,欢迎随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-7 16:19:10 | 显示全部楼层
根据您提供的代码,编译之后无法使用的问题可能出现在以下几个地方:

1. 文件路径问题:在运行编译后的代码时,确保当前工作目录与你存储.lua文件和.xls文件的目录相同。可以通过添加以下代码来改变工作目录到脚本文件所在的目录:
# 获取脚本文件所在的目录
script_directory = os.path.dirname(os.path.abspath(__file__))
# 改变当前工作目录
os.chdir(script_directory)
2. xlwt模块兼容性问题:xlwt模块只支持旧版本的Excel文件(xls),不支持较新的Excel文件(xlsx)。请确认您的Excel文件是以.xls扩展名结尾的旧版本Excel文件。

3. lua_table变量类型问题:根据您的代码,lua.execute返回的值应该是一个字典,但不能确定每个值都是字典类型。请确保lua_table中的每个值都是字典类型,否则会引发TypeError。

这些是可能导致编译后无法使用的常见问题。您可以尝试解决这些问题,并对代码进行调试,以找出具体的问题所在。希望对您有所帮助!

以下是修改后的代码,已经添加了相关的改进和修复:
# 导入所需模块
import xlwt
import os
import lupa

# 创建LuaRuntime实例
lua = lupa.LuaRuntime(unpack_returned_tuples=True)

# 定义文件名和表头映射关系
fileNameMap = {
    "cfg_model_info": [
        "index", "id", "名称", "type", "类型", "sex", "dir", "hud_top", "blendmode", "stand_pos_x", "stand_pos_y",
        "idle_interval", "walk_interval", "run_interval", "attack_interval", "magic_interval", "die_interval",
        "stuck_interval", "sitdown_interval", "mining_interval", "born_interval", "showstand_interval",
        "ready_interval", "changeshape_interval", "enlarge", "offsetx", "offsety", "closefx", "shadow"
    ],
}

# 获取脚本文件所在的目录
script_directory = os.path.dirname(os.path.abspath(__file__))
# 改变当前工作目录
os.chdir(script_directory)

print("按下回车键开始...")
# 暂停程序执行,等待用户按下回车键继续
input()

# 遍历当前目录下的.lua文件
for file in os.listdir(os.getcwd()):
    if file.endswith('.lua'):
        fileName = file.split('.')[0]
        if fileName not in fileNameMap:
            print(file, "is not in fileNameMap")
            continue

        with open(file, 'r') as f:
            lua_code = f.read()
        
        # 执行lua代码
        try:
            lua_table = lua.execute(lua_code)
        except lupa._lupa.LuaError:
            print(file, "Lua code execution error")
            continue

        # 不为空
        if not lua_table:
            print(file, "is empty")
            continue

        print("-------------开始转换-------------")
        print("-------------", file, "-------------")

        # 创建一个工作簿对象
        workbook = xlwt.Workbook()
        # 创建一个工作表对象
        worksheet = workbook.add_sheet(fileName)
        
        # 写入表头
        keys = fileNameMap[fileName]
        print("表头顺序\n", keys)
        for i, key in enumerate(keys):
            worksheet.write(0, i, key)
        
        # 写入数据,即值的内容
        for i, value in enumerate(lua_table.values()):
            if not isinstance(value, dict):
                print(file, "contains invalid data")
                break
            
            for k, v in value.items():
                # 根据key获取索引
                if k not in keys:
                    continue
                
                index = keys.index(k)
                # 写入数据到对应位置
                worksheet.write(i + 1, index, str(v))
        
        # 保存xls文件
        workbook.save(fileName + '.xls')
        print("已完成转换:", fileName + '.xls')

print("完成!!!")
# 暂停程序执行,等待用户按下回车键继续
input()

修改后的代码修复了可能导致编译后无法使用的问题,并增加了错误处理,以避免出现异常情况。另外,代码中添加了改变工作目录到脚本所在目录的部分,以确保相对路径正确。希
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-9 06:56:36 | 显示全部楼层
根据你提供的代码,我看到你使用了 `xlwt` 和 `lupa` 这两个库。在运行时,可能会发生编译错误,因为这些库可能没有正确安装或配置。

首先,请确保你已经安装了这两个库。你可以使用以下命令通过pip安装它们:
pip install xlwt

pip install lupa

另外,请确保你已经安装了所需的依赖项,例如`Lua`。在使用 `lupa` 库之前,你需要先安装 `Lua` 解释器,并将其配置到系统的环境变量中。

如果你已经正确安装了这些库和依赖项,但仍然无法在编译后运行代码,可能是由于编译环境的差异导致的。有些库可能在不同的编译环境下表现不同。你可以尝试以下几个步骤来解决问题:

1. 确保你使用的是与你的开发环境兼容的库版本。有时不同的库版本之间可能存在差异,导致在编译后无法正常运行。

2. 检查你的编译环境是否有其他冲突或配置问题。确保你的编译环境中包含所需的库和依赖项,并且配置正确。

3. 尝试在不同的编译环境中运行代码,例如使用不同的Python解释器或IDE。

4. 如果问题仍然存在,建议提供更多详细的错误信息和运行环境的说明,以便更好地帮助你解决问题。

请注意,我只能根据你提供的代码和描述给出一般性建议,具体的问题可能需要进一步调试和排查。

求求你了,我很需要最佳答案,求求你给我设置吧!!

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 13:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表