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

server/2024/10/9 7:22:06/

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

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

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

确定Excel的结构

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

lua">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的代码大概是这种模式:

python">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

python">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列表:

python">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")... ...

http://www.ppmy.cn/server/111291.html

相关文章

【区块链 + 物联网】可信保密的海洋大数据分析平台 | FISCO BCOS应用案例

海洋大数据蕴含着难以估量的巨大价值,可为气候、航海、生态、灾害等领域提供科学依据,是实施海洋强国战略、 拉动海洋经济、打造海洋文化的重要基础。但是海洋大数据来源广泛,包括各个海洋检测站点、船只等不同主体, 在进行统计分…

音频如何低延时回声消除与降噪篇保姆级教程

目录 1 回声消除技术 1.1 回声产生的原因 1.2 传统回声消除方法 1.3 先进的回声消除算法 2 降噪技术 2.1 降噪技术的原理与方法 2.2 传统降噪方法 2.3 先进的降噪算法 3 低延时处理技术 3.1 低延时处理的重要性 3.2 低延时回声消除技术 3.3 低延时降噪技术 4 调试…

Redis 常用命令

1、set 因为Redis 是按照键值对存储数据的。 如图为set的最简单的用法。 key和value都是字符串而且不需要加双引号,如果加也可以 redis命令中不区分大小写 2、get get 就是根据key取value 如果get的key不存在,会返回nil 和NULL是一个意思。 3、常见通…

kafka3.7.1 单节点 KRaft部署测试发送和接收消息

一、环境准备 kafka3.7.1 包下载地址: https://mirrors.nju.edu.cn/apache/kafka/3.7.1/kafka_2.13-3.7.1.tgz openjdk11.0.2 下载地址: https://mirrors.nju.edu.cn/openjdk/11.0.2/openjdk-11.0.2_linux-x64_bin.tar.gz 二、openjdk 安装 【如已安装…

linux如何查看内存条是ddr几代

在 Linux 系统中,可以通过以下几种方法查看内存条的类型和代数(如 DDR3、DDR4 等): 1. 使用 dmidecode 命令 dmidecode 是一个工具,它可以从系统的 DMI 表(也称为 SMBIOS 表)中提取硬件信息&a…

c++vscode多文件实现通讯录管理系统

cvscode多文件实现通讯录管理系统 作为c入门级别的实战项目,此通讯管理系统项目不仅仅是对c入门阶段学习成果的检验,也是对c基础知识的回顾,体会c在实战制作中的思路,是入门c单文件实现通讯录系统的改进 一、多文件通讯录管理系统简介 系统需…

c++ 标准模板库 STL

C 标准模板库(STL,Standard Template Library)是一个强大的 C 库,包含了一组泛型类和函数,这些类和函数可以用来处理各种数据结构和算法。STL 的主要组成部分包括容器、算法、迭代器和函数对象。 ### STL 的主要组成部…

pyro plate的介绍,plate也能设置cuda pytorch概率编程 贝叶斯神经网络

class plate(name: str, size: Optional[int] None, subsample_size: Optional[int] None, subsample: Optional[torch.Tensor] None, dim: Optional[int] None, use_cuda: Optional[bool] None, device: Optional[str] None)[source] 基元 plate 获取参数存储()→ pyr…