前言:
如今小伙伴们对“luapython混合编程”都比较珍视,小伙伴们都需要了解一些“luapython混合编程”的相关内容。那么小编在网络上汇集了一些对于“luapython混合编程””的相关内容,希望同学们能喜欢,小伙伴们快快来了解一下吧!excel表格格式
说明:
1.前三行分别为:字段中文解释、字段名、字段类型
2.程序不用的字段,加”_”前缀,不会生成进lua文件里
3.策划填数值的时候,偶尔会遗漏数据,当存在空值时,依据字段类型,填上默认值。
4.支持一个字段填上多组数据,如”进阶消耗”字段,自定义类型”table”,代表{ {道具1id,道具1数量},{道具2id,道具2数量}}, … }
脚本文件目录结构
windows bat命令,用于快速执行excel2lua.py脚本
excel2lua.py脚本代码
import sys
import os
import xlrd
import re
# 当前脚本路径
curpath = os.path.dirname(os.path.abspath(sys.argv[0]))
# 文件头描述格式化文本
lua_file_head_format_desc = '''--[[
%s
exported by excel2lua.py
from file:%s
--]]\n\n'''
# 将数据导出到tgt_lua_path
def excel2lua(src_excel_path, tgt_lua_path):
print('[file] %s -> %s' % (src_excel_path, tgt_lua_path))
# load excel data
excel_data_src = xlrd.open_workbook(src_excel_path, encoding_override = 'utf-8')
print('[excel] Worksheet name(s):', excel_data_src.sheet_names())
excel_sheet = excel_data_src.sheet_by_index(0)
print('[excel] parse sheet: %s (%d row, %d col)' % (excel_sheet.name, excel_sheet.nrows, excel_sheet.ncols))
# excel data dict
excel_data_dict = {}
# col name list
col_name_list = []
#col val type list
col_val_type_list = []
# ctype: 0 empty, 1 string, 2 number, 3 date, 4 boolean, 5 error
# 遍历第二行的所有列 保存字段名
for col in range(0, excel_sheet.ncols):
cell = excel_sheet.cell(1, col)
col_name_list.append(str(cell.value))
assert cell.ctype == 1, "found a invalid col name in col [%d] !~" % (col)
# 遍历第三行的所有列 保存数据类型
for col in range(0, excel_sheet.ncols):
cell = excel_sheet.cell(2, col)
col_val_type_list.append(str(cell.value))
assert cell.ctype == 1, "found a invalid col val type in col [%d] !~" % (col)
# 剔除表头、字段名和字段类型所在行 从第四行开始遍历 构造行数据
for row in range(3, excel_sheet.nrows):
# 保存数据索引 默认第一列为id
cell_id = excel_sheet.cell(row, 0)
assert cell_id.ctype == 2, "found a invalid id in row [%d] !~" % (row)
# 检查id的唯一性
if cell_id.value in excel_data_dict:
print('[warning] duplicated data id: "%d", all previous value will be ignored!~' % (cell_id.value))
# row data list
row_data_list = []
# 保存每一行的所有数据
for col in range(0, excel_sheet.ncols):
cell = excel_sheet.cell(row, col)
k = col_name_list[col]
cell_val_type = col_val_type_list[col]
# ignored the string that start with '_'
if str(k).startswith('_'):
continue
# 根据字段类型去调整数值 如果为空值 依据字段类型 填上默认值
if cell_val_type == 'string':
if cell.ctype == 0:
v = '\'\''
else:
v = '\'%s\'' % (cell.value)
elif cell_val_type == 'int':
if cell.ctype == 0:
v = -1
else:
v = int(cell.value)
elif cell_val_type == 'float':
if cell.ctype == 0:
v = -1
else:
v = float(cell.value)
elif cell_val_type == 'table':
if cell.ctype == 0:
v = '{}'
else:
v = cell.value
else:
v = cell.value
# 加入列表
row_data_list.append([k, v])
# 保存id 和 row data
excel_data_dict[cell_id.value] = row_data_list
# 正则搜索lua文件名 不带后缀 用作table的名称 练习正则的使用
searchObj = re.search(r'([^\\/:*?"<>|\r\n]+)\.\w+$', tgt_lua_path, re.M|re.I)
lua_table_name = searchObj.group(1)
# print('正则匹配:', lua_table_name, searchObj.group(), searchObj.groups())
# 这个就直接获取文件名了
src_excel_file_name = os.path.basename(src_excel_path)
tgt_lua_file_name = os.path.basename(tgt_lua_path)
# file head desc
lua_file_head_desc = lua_file_head_format_desc % (tgt_lua_file_name, src_excel_file_name)
# export to lua file
lua_export_file = open(tgt_lua_path, 'w')
lua_export_file.write(lua_file_head_desc)
lua_export_file.write('%s = {\n' % lua_table_name)
# 遍历excel数据字典 按格式写入
for k, v in excel_data_dict.items():
lua_export_file.write(' [%d] = {\n' % k)
for row_data in v:
lua_export_file.write(' {0} = {1},\n'.format(row_data[0], row_data[1]))
lua_export_file.write(' },\n')
lua_export_file.write('}\n')
lua_export_file.close()
print('[excel] %d row data exported!~' % (excel_sheet.nrows))
# Make a script both importable and executable (∩_∩)
if __name__ == '__main__':
if len(sys.argv) < 3:
print('python excel2lua.py <excel_input_path> <lua_output_path>')
exit(1)
excel2lua(os.path.join(curpath, sys.argv[1]), os.path.join(curpath, sys.argv[2]))
exit(0)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
执行bat命令,结果截图
生成的lua文件截图
检测lua文件数据的有效性
标签: #luapython混合编程