excle转python/lua

Mar 30, 2016


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

3.输出lua字串到lua文件即可