当前位置: 首页 > news >正文

使用python导出Excel表格中的lua配置

背景:游戏开发中, 策划使用Excel配置游戏中的参数数据,写一个工具用于导出这些配置

工具选择使用 python来开发,这样Windows、macOS、Linux平台都可以使用,而且有丰富的第三方模块。

本机先安装python,我这边使用的是python3.10.6。

确定Excel的结构

假设我们需要的配置是这种结构的:

Items = {[1001] = { id = 1001, name = "新手武器", level = 1, attrs = { atk = 10 }, icon = "resource/items/1001.png" },[1002] = { id = 1002, name = "新手衣服", level = 1, attrs = { def = 10 }, icon = "resource/items/1002.png" },[1003] = { id = 1003, name = "新手护手", level = 1, attrs = { atk = 3, def = 3 }, icon = "resource/items/1003.png" }
}

表格中则为这样:在这里插入图片描述

我们称每一个Items项为ItemData,第一行为ItemData的中所有的key,第一列为ItemData在Items表中的key,从第二行开始每一格填入所在列的key对应的值,然后我们直接以文本格式读取所有内容,用=号连接key和value即可。

文件命名为:道具表.xlsx,表单名先设置为lua配置的表名:Items。

生成配置文件config.lua的代码大概是这种模式:

with open('config.lua', 'w', encoding="utf-8") as file:file.write("Items = {\n")#写入表格数据file.write("}")

生成文件:
在这里插入图片描述

读取Excel中的数据

Excel中的数据这里使用pandas模块来读取,然后写入config.lua中
先安装padas:pip install pandas

import pandas#参数1是Excel文件路径
#参数2是表单名 
#参数header=n表示表头在第n+1行,没有表头则不填,我们这里表头在第一行所以填0
#参数dtype=str表示格子内的数据按字符串格式读取
#返回值是pandas读取表单生成的DataFrame
df = pandas.read_excel(".//配置表.xlsx", "Items", header=0, dtype=str)#数据的行、列数
row, column = df.shapewith open('config.lua', 'w', encoding="utf-8") as file:file.write("Items = {\n")#遍历所有行 每一行是一条 ItemDatafor r in range(row):row_data = df.iloc[r,:]#第一列是ItemData 的 key#df.columns 是表头内容key = row_data[df.columns[0]]file.write(f"[{key}]=")file.write("{")#遍历所有列 for c in range(column):sub_key = df.columns[c]sub_value = row_data[sub_key]file.write(f"{sub_key} = {sub_value}, ")file.write("},\n")file.write("}")

导出所有表单

pandas可以通过下述方法遍历sheet列表:

import pandasef = pandas.ExcelFile(".//配置表.xlsx")
for name in ef.sheet_names:# read_excel的参数1也可以使用ExcelFiledf = pandas.read_excel(ef, name, header=0, dtype=str)#数据的行、列数row, column = df.shapewith open('config.lua', 'w', encoding="utf-8") as file:file.write(name)file.write(" = {\n")... ...

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【网络安全 | 虚拟机】VMware Workstation Pro下载安装使用教程(免费版)
  • C语言深度复习【数组和指针】
  • 滚雪球学MyBatis-Plus(02):环境准备
  • python-word添加标题,段落,文字块
  • C++ 计算日期到天数转换(牛客网)
  • 基于SpringBoot+Vue+MySQL的宠物寄养服务管理系统
  • Java throw和throws有什么区别?
  • 将工程内的组件 集成并发布到私有仓库以及后续联动运行(热启动)
  • Hibernate 批量插入速度慢的原因和解决方法
  • 六、Selenium操作指南(二)
  • JavaEE第19节 用UDP套接字实现简单回显服务器
  • JVM学习《类加载运行-jvm内存模型》
  • EXO:StandardNode _process_tensor
  • Node.js中的SQLite库:安装、对比与选择指南
  • Datawhale X 李宏毅苹果书 AI夏令营 进阶 Task2-自适应学习率+分类
  • angular学习第一篇-----环境搭建
  • codis proxy处理流程
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • ES6语法详解(一)
  • Java 内存分配及垃圾回收机制初探
  • Java,console输出实时的转向GUI textbox
  • JavaScript DOM 10 - 滚动
  • mockjs让前端开发独立于后端
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Promise面试题2实现异步串行执行
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • TypeScript实现数据结构(一)栈,队列,链表
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • Zepto.js源码学习之二
  • 仿天猫超市收藏抛物线动画工具库
  • 精彩代码 vue.js
  • 思考 CSS 架构
  • 怎么把视频里的音乐提取出来
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • #HarmonyOS:Web组件的使用
  • #laravel 通过手动安装依赖PHPExcel#
  • #QT(串口助手-界面)
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • %check_box% in rails :coditions={:has_many , :through}
  • (1)Hilt的基本概念和使用
  • (CPU/GPU)粒子继承贴图颜色发射
  • (poj1.3.2)1791(构造法模拟)
  • (vue)el-cascader级联选择器按勾选的顺序传值,摆脱层级约束
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (四)js前端开发中设计模式之工厂方法模式
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .Net Core和.Net Standard直观理解
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .NetCore+vue3上传图片 Multipart body length limit 16384 exceeded.
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .NET中使用Redis (二)