使用IntelliJ IDEA编辑器编写Lua脚本的时候,安装一个插件 "EmmyLua" 可以对有代码提示功能

想把protoBuf协议文件转成Lua代码,然后给出代码提示

第一次使用python脚本

使用到的几个功能记录一下

1.设置为文件格式备注为utf-8

#!/usr/bin/python
# -*- coding: UTF-8 -*-

2.定义一个方法,可以返回多个值

#--------------------------------------------
# 替换字符串方法
#--------------------------------------------
#define a function
def ReplaceStr(s):
#TODO ... (自己的逻辑)
return s #备注:方法可以返回多个值
def MyFunc(s):
local s1 = "我是s1"
return s,s1 #调用时,用两个变量接
rtS,rtS1 = MyFunc(str)

2.替换字符串

s = s.replace('=', ' ');    #先把所有的'='替换成'空格'

3.用正则替换任意个数的'空格'换成'-'

s = re.sub(r'\s+', '-', s); #把任意多个'空格'替换成'-'

4.把字符串分割成数组

arrSplit = s.split('-') #把"1-2-3" 分割成 [1,2,3]

5.逻辑判断 if-else 和 与或非

typeValue = ""
if s == "int32":
typeValue = "0"
elif s == "int64":
typeValue = "0"
else:
typeValue = "{}" # 判断符号
# 等于'=='

6.把字符串分割成数组

arrSplit = s.split('-') #把"1-2-3" 分割成 [1,2,3]

7.读文件

fileRead = open("client2server.proto")             # 返回一个文件对象
line = fileRead.readline() # 调用文件的 readline()方法
while line:
print line
# 读取下一行,while循环,直到读完最后一行
line = fileRead.readline()

8.写文件

fileWrite = open('LuaProto.lua', 'w')
fileWrite.write(allStr)
fileWrite.close( )
print "文件保存成功,当前目录下的LuaProto.lua"

以下是代码

Proto文件

// msgType = 1
// 客户端 -> 服务器
// 发送登录消息,包括账号和密码
message Login {
required string user = 1;
required string pwd = 2;
} message LoginRt {
required int32 rt = 1;
required string token = 2;
}

python脚本

#!/usr/bin/python
# -*- coding: UTF-8 -*- import re #--------------------------------------------
# 替换字符串方法
#--------------------------------------------
#define a function
def ReplaceStr(s):
s = s.replace('=', ' '); #先把所有的'='替换成'空格'
s = s.replace('=', ' '); #先把所有的'='替换成'空格'
s = s.replace('{', ' '); #先把所有的'{'替换成'空格'
s = s.replace('\t', ' '); #先把所有的'\t'替换成'空格'
s = re.sub(r'\s+', '-', s); #把任意多个'空格'替换成'-'
return s #--------------------------------------------
# 检测类型赋值
#--------------------------------------------
#define a function
def GetTypeValue(s):
typeValue = ""
if s == "int32":
typeValue = "0"
elif s == "int64":
typeValue = "0"
elif s == "string":
typeValue = "\"\""
elif s == "string":
typeValue = "\"\""
else:
typeValue = "{}"
return typeValue #--------------------------------------------
# 检测类型替换后的字符串
#--------------------------------------------
#define a function
def CheckType(s,clsStr):
rtStr = ""
arrSplit = s.split('-')
newCls = ""
if arrSplit[0] == "message":
newCls = arrSplit[1]
rtStr += "\n---@class " + newCls + '\n'
rtStr += newCls + " = {}"
rtStr += '\n'
elif (len(arrSplit) > 3) and (arrSplit[1] == "required" or arrSplit[1] == "repeated" or arrSplit[1] == "optional"):
rtStr += clsStr + "." + arrSplit[3] + " = " + GetTypeValue(arrSplit[2])
rtStr += '\n'
#elif arrSplit[0] == '}':
#rtStr += '}'
return rtStr, newCls #--------------------------------------------
# 读取文件
#--------------------------------------------
allStr = "" #拼接的字符串,用来写文件
lastClass = "" #记录上一个ClassName
fileRead = open("client2server.proto") # 返回一个文件对象
line = fileRead.readline() # 调用文件的 readline()方法
while line:
rptStr = ""
rptStr = ReplaceStr(line) #自己写的替换字符串
rptStr,tmpCls = CheckType(rptStr,lastClass)
if tmpCls != "":
lastClass = tmpCls allStr += rptStr
line = fileRead.readline() #--------------------------------------------
# 写文件
#--------------------------------------------
fileWrite = open('LuaProto.lua', 'w')
fileWrite.write(allStr)
fileWrite.close( )
print "文件保存成功,当前目录下的LuaProto.lua"

生成后的Lua文件

---@class Login
Login = {}
Login.user= ""
Login.pwd = "" ---@class LoginRt
LoginRt = {}
LoginRt.rt = 0
LoginRt.token = ""

API 参考

菜鸟教程 Python 基础教程
http://www.runoob.com/python/python-tutorial.html

初次使用Python脚本,proto协议文件转Lua代码的更多相关文章

  1. python脚本解析json文件

    python脚本解析json文件 没写完.但是有效果.初次尝试,写的比较不简洁... 比较烦的地方在于: 1,中文编码: pSpecs.decode('raw_unicode_escape') 2,花 ...

  2. 利用Python 脚本生成 .h5 文件 代码

    利用Python 脚本生成 .h5 文件 import os, json, argparse from threading import Thread from Queue import Queue ...

  3. C#调用Python脚本打印pdf文件

     介绍:通过pdf地址先将文件下载到本地,然后调用打印机打印,最后将下载的文件删除. 环境:windows系统.(windows64位) windows系统中安装python3.6.2环境 资料: O ...

  4. python脚本将json文件生成C语言结构体

    1.引言 以前用过python脚本根据excel生成相关C语言代码,其实本质就是文件的读写,主要是逻辑问题,这次尝试将json文件生成C语言的结构体. 2.代码 这是一个json文件,生成这个结构体的 ...

  5. Python脚本破解压缩文件口令(zipfile)

    环境:Windows python版本2.7.15 Python中操作zip压缩文件的模块是 zipfile . 相关文章:Python中zipfile压缩文件模块的使用 我们破解压缩文件的口令也是用 ...

  6. python调用另一个文件中的代码,pycharm环境下:同文件夹下文件(.py)之间的调用,出现红线问题

    如何调用另一个python文件中的代码无论我们选择用何种语言进行程序设计时,都不可能只有一个文件(除了“hello world”),通常情况下,我们都需要在一个文件中调用另外一个文件的函数呀数据等等, ...

  7. python脚本修改hosts文件

    用python3写了个修改hosts的小脚本,没有技术含量,顺带复习一下文件操作和os.sys模块的内容了. # -*- coding:utf-8 -*- #!/usr/bin/env python ...

  8. python脚本批量复制文件

    1.拷贝一个目录下的所有文件及文件夹到另一个目录下(递归拷贝) # cat /home/test.py #!/usr/bin/python  import os  import shutil def ...

  9. Python脚本:删除文件夹下的重复图片,实现图片去重

    近期在整理相册的时候,发现相册中有许多重复图片,人工一张张筛查删除太枯燥,便写下这个脚本,用于删除文件夹下重复的图片. 第一部分:判断两张图片是否相同 要查找重复的图片,必然绕不开判断两张图片是否相同 ...

随机推荐

  1. javascript第四章--面向对象的程序设计

    ① 理解对象 ② 创建对象 ③ 继承

  2. ionic开发环境搭建之android及问题

    1. 准备工作: a)     配置java开发环境 b)    配置安卓开发环境 注:下载android-studio后,可能会出现android一直在编译,出现这种情况,关掉你的as ,找到你的路 ...

  3. Maven依赖分析

    背景 昨天帮一位同事排查了一个依赖冲突的问题.问题的现象就是在IntelliJ IDEA运行项目正常,但是打包(Maven assembly jar)之后传到服务器运行失败,报错:Caused by: ...

  4. 25个Java机器学习工具和库

    本列表总结了25个Java机器学习工具&库: 1. Weka集成了数据挖掘工作的机器学习算法.这些算法可以直接应用于一个数据集上或者你可以自己编写代码来调用.Weka包括一系列的工具,如数据预 ...

  5. python实战===如何优雅的打飞机

    这是一个打飞机的游戏,结构如下: 其中images中包含的素材为 命名为alien.png    命名为ship.png 游戏效果运行是这样的: 敌军,也就是体型稍微大点的,在上方左右移动,并且有规律 ...

  6. mongodb数据库禁止外网访问以及添加账号

    未曾料到被黑客勒索比特币的戏码竟然降临到我的身上,几个月的技术积累付之一炬.怪只怪自己学艺不精,心存侥幸和无知,不过经此一役,方知网络安全防护的重要性. 一直未给自己的mongodb数据库设置账号密码 ...

  7. CYQ.Data 正式支持 DotNET Core 版本发布

    闲话几句: 自从上周开始,IOS人员逝去,就开始接手IOS的代码了. 并开始整理IOS的代码(包括当时一开始设计的开发框架). 在未来不远的日子里,设想是有一个系列详细的介绍I恋App和IT连App及 ...

  8. is 和==的区别

    Python中的对象包含三要素:id.type.value.其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值.is判断的是a对象是否就是b对象,是通过id来判断的.==判断的 ...

  9. Numpy入门 - 生成数组

    今天是Numpy入门系列教程第一讲,首先是安装Numpy: $ pip install numpy numpy是高性能科学计算和数据分析的基础包,本节主要介绍生成连续二维数组.随机二维数组和自定义二维 ...

  10. ##5.2 Nova计算节点-- openstack pike

    ##5.2 Nova计算节点 openstack pike 安装 目录汇总 http://www.cnblogs.com/elvi/p/7613861.html ##5.2 Nova计算节点 # co ...