[erlang] [python] 在excel设定固定规则,转换为erl和hrl文件

来源:互联网 发布:安卓机顶盒软件 编辑:程序博客网 时间:2024/06/05 11:07

为了方便游戏中固定规则的设定,可以先由策划人员把固定的规则写入excel,在转化在erlang中的hrl和erl文件读取

感谢模板提供http://www.jb51.net/article/122146.htm

python代码如下:

#!/usr/bin/env python# -*- coding: UTF-8 -*-import sysreload(sys)sys.setdefaultencoding('utf-8')import sysfrom openpyxl.reader.excel import load_workbookimport osimport os.pathdef gen_data(filename):    wb = load_workbook('dataxlsx/' + filename + '.xlsx')  # 加载文件所有分页    sheetnames = wb.get_sheet_names()  # 获取所有分页的名字列表    ws = wb.get_sheet_by_name(sheetnames[0])  # 取第一个分页的数据    # print 'ws:', ws    # print "Work Sheet Titile:", ws.title # 分页名称    # print "Work Sheet Rows:", ws.max_row # 分页行数    # print "Work Sheet Cols:", ws.max_column # 分页列数    hrlcontent = []  # hrl数据内容    content = []  # 数据内容    id_list = []  # ID列表    # ========================start concat need data=================    content.append('%% this file is auto maked!\n')    content.append('-module(data_' + filename.lower() + ').\n')    content.append('-include("../include/data_'+ filename.lower() +'_record.hrl").\n')    content.append('-export([get/1, id_list/0, length/0]).\n')    hrlcontent.append('-ifndef(' + filename.upper() + '_RECORD).\n' + '-define(' + filename.upper() + '_RECORD, true).\n\n')    for j in range(ws.max_column - 1):        if j == 0:            hrlcontent.append('-record(' + filename.lower() + '_config,\n    {\n')            hrlcontent.append('        ' + str(ws[10][j].value).strip() + ',\n')        elif j == ws.max_column - 2:            hrlcontent.append('        ' + str(ws[10][j].value).strip() + '\n')        else:            hrlcontent.append('        ' + str(ws[10][j].value).strip() + ',\n')    hrlcontent.append('    }).\n\n')    hrlcontent.append('-endif.')    for i in range(11, ws.max_row - 7):  # 从表格第三行开始读取,由于range函数不包含文件尾,所以为了读到最后一行需+1        for j in range(ws.max_column - 1):            if ws[i][j].value == None:                content.append(' ,""')            elif j == 0:                id_list.append(int(ws[i][j].value))                content.append('get(' + str(ws[i][j].value).strip() + ') ->\n')                content.append('    #' + filename.lower() + '_config\n    {\n        '+ str(ws[10][j].value).strip() +' = '+ str(ws[i][j].value).strip() + ',\n')            elif j == ws.max_column - 2:                content.append('        ' + str(ws[10][j].value).strip() + ' = ' + str(ws[i][j].value).strip() + '\n')            else:                content.append('        ' + str(ws[10][j].value).strip() + ' = ' + str(ws[i][j].value).strip() + ',\n')        content.append('    };\n')    content.append('get(_) ->\n')    content.append(' not_match.\n')    content.append('length() ->\n')    content.append(' ' + str(ws.max_row - 18) + '.\n')    content.append('id_list() ->\n ' + str(id_list) + '.')    # ==============================end===========================    # 写入数据    f = file('./server/data_' + filename.lower() + '.erl', 'w+')    f.writelines(content)    print 'create new file:data_', filename.lower() + '.erl'    f.close()  # 关闭通道    h = file('./include/data_' + filename.lower() + '_record.hrl', 'w+')    h.writelines(hrlcontent)    print 'create new file:data_', filename.lower() + '_record.hrl'    h.close()  # 关闭通道    returndef start_gen():    # 删除旧的数据    delnames = os.listdir('./server')    for delname in delnames:        os.remove('./server/' + delname)        print 'delete old file:', delname    delnames = os.listdir('./include')    for delname in delnames:        os.remove('./include/' + delname)        print 'delete old file:', delname    for _, _, filenames in os.walk('./dataxlsx'):  # 遍历文件夹        for filename in filenames:  # 遍历文件            find = filename.find('.xlsx')  # 返回该文件名称长度            #   print "find is:", find            if filename[0] == '~' or find == -1:  # 文件名以'~'开头或者找不到文件名, 如以'.'开头的文件                continue            else:                split_list = filename.split('.')  # 使用'.'分割文件名,获得[文件名,文件格式]                #    print split_list                gen_data(split_list[0])  # 用文件名作为参数调用gen_datastart_gen()

原创粉丝点击