类JSON无引号等号格式名称及Python导入方法咨询
格式名称与Python导入方案
格式名称
你遇到的这种格式是Lua表语法,也是游戏《Factorio》配置文件的常用格式——Factorio的物品、配方配置基本都采用这类类JSON的Lua表写法。它完全符合Lua中表的定义规则:键名如果是合法标识符可省略引号,用=替代冒号实现键值关联。
Python导入方案
方案1:用Lua解析库直接处理(推荐)
这种格式本质是Lua代码,用专门的Lua-Python交互库可直接解析,避免手动转换的潜在bug:
- 先安装
lupa库:
pip install lupa
- 解析代码示例:
import lupa from lupa import LuaRuntime lua = LuaRuntime(unpack_returned_tuples=True) # 读取日志内容到content变量 with open('your_log_file.txt', 'r') as f: content = f.read() # 解析Lua表为Python字典 data = lua.eval(content) # 直接操作解析后的字典 print(data['accumulator']['animation_speed'])
方案2:手动转标准JSON(适合简单场景)
如果不想额外安装库,可写简单转换脚本,将格式转为标准JSON后用json库解析:
import re import json def convert_to_json(lua_table_str): # 把=替换为: step1 = lua_table_str.replace('=', ':') # 给无引号的合法键名添加双引号 step2 = re.sub(r'([a-zA-Z_][a-zA-Z0-9_]*):', r'"\1":', step1) return step2 # 读取日志内容 with open('your_log_file.txt', 'r') as f: content = f.read() # 转换并解析 json_str = convert_to_json(content) data = json.loads(json_str) print(data['accumulator']['ingredients'][0])
注意:手动转换仅适合结构简单的场景,若日志包含Lua特有语法(比如注释、函数调用)会失效,此时优先用方案1。
内容的提问来源于stack exchange,提问作者DeerFreak
相关产品推荐
相关产品推荐

