|
发表于 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()
复制代码
修改后的代码修复了可能导致编译后无法使用的问题,并增加了错误处理,以避免出现异常情况。另外,代码中添加了改变工作目录到脚本所在目录的部分,以确保相对路径正确。希 |
|