0.写在前面
以前的配置文件是xml,由于配置的复杂度增加,所以换用excle,比较直观,程序是lua做的逻辑,所以配置文件最好是lua以保证效率,所以,需要一个工具能够将excle配置文件转换为lua文件。处于顺手考虑,使用的python
1.excle转python
首先得有一个顺手的库,比如XLRD,可以获取excle任意sheet内的任意单元格,小巧方便,这方面教程不少,我就不再赘述了。 流程方面,读取文件,拿sheet,迭代拿行,迭代拿单元格字串,对于单元格内的数据项,一般有一个组约定的分隔符,按分隔符splite之后获取单个数据项存储为合适的python数据结构
2.python转lua
对于基本的python数据结构list,map,tuple来说,转成lua的table还是比较简单的,需要注意一下输出的lua文本需要有缩进格式,以便肉眼检查,另外,对于lua中的文本,需要在py到lua的过程中手动加上引号
,简单的转换函数如下
def toLuaString(data, deep, parentType):
result = ""
deep += 1
if type(data) == dict :
items = data.items()
if len(items) > 0:
if parentType == tuple :
result += "\r" + "\t"*deep + "{\r"
else :
result += "\t"*deep + "{\r"
typeList = []
for it in items :
result += toLuaString(it, deep, type(data))
typeList.append(type(it))
if typeList[0] == list :
result += "\t"*deep + "},"
else :
result += "\t"*deep + "},\r"
else :
result += "{}, \r"
elif type(data) == list :
if len(data) > 0 :
result += "\r" + "\t"*deep + "{\r"
for i in range(len(data)) :
if i == 0 :
if type(data[0]) != dict :
result += "\t" * (deep + 1)
result += toLuaString(data[i], deep, type(data))
result += "\r" + "\t"*deep + "],\r"
else :
result += "{},\r"
elif type(data) == tuple :
result += "\t"*deep + data[0] + " = " + toLuaString(data[1],deep, type(data)) + "\r"
elif type(data) == str :
result += data + ","
else :
pass
deep -= 1
return result