使用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脚本转lua_初次使用Python脚本,proto协议文件转Lua代码相关推荐

  1. python怎么模拟app_初次尝试Python启动模拟器中的APP程序

    首先启动我们已经安装好的模拟器,将需要测试的.apk安装包直接拖入模拟器,它会自动安装:然后启动Appium桌面应用程序,它的默认端口是4723,而appium.webdriver驱动中默认端口是44 ...

  2. python字符串换行连接_python入门 python字符串换行显示、字符串太长\连接多行

    #coding:utf-8 #/usr/bin/python """ 2018-11-03 dinghanhua 缩进 换行 """ &qu ...

  3. python脚本转lua_从Python运行Lua脚本

    假设我有一个包含2个函数的Lua脚本.我想用Python脚本中的一些参数调用这些函数中的每一个. 我已经看过如何使用Lunatic Python在Python中嵌入Lua代码的教程,反之亦然,但是,我 ...

  4. python从外部传入参数_从另一个Python脚本运行一个Python脚本,并传入参数 - python...

    我想从另一个Python脚本运行一个Python脚本.我想像使用命令行一样传递变量. 例如,我将运行我的第一个脚本,该脚本将遍历值列表(0.1.2.3),并将其传递给第二个脚本,依次为script2. ...

  5. python运维脚本部署jdk_Jenkins自动执行Python脚本,并输出测试报告

    这段时间,在家时间自由(除了睡觉8小时,其他时间都在工作和学习),有大把的时间实操练习一些硬技能: 今天,更新一篇利用Jenkins这套框架,调用Python自动化脚本,并输出测试报告的手把手实操文章 ...

  6. arcgis python脚本实现从界面选择输入输出_arcgis python脚本实现从界面选择输入输出_ArcGIS Python编程案例(2)-使用ArcPy编写脚本......

    本章将涉及以下案例: 使用ArcGIS Python窗体 访问ArcPy 从脚本中执行工具 使用ArcGIS桌面软件帮助系统 使用变量存储数据 访问ArcPy中的模块 引言 地理处理任务往往是耗时且重 ...

  7. python是一种面向对象、直译式的脚本编程语言_什么是python编程语言

    编程语言是一组用来定义计算机程序的语法规则:它是一种被标准化的交流技巧,用来向计算机发出指令.Python就是一种编程语言,一种面向对象的动态类型语言.一种用处广泛的解释型脚本语言.下面简单介绍一下p ...

  8. python利器怎么编程-Linux 利器- Python 脚本编程入门(一)

    导读 众所周知,系统管理员需要精通一门脚本语言,而且招聘机构列出的职位需求上也会这么写.大多数人会认为 Bash (或者其他的 shell 语言)用起来很方便,但一些强大的语言(比如 Python)会 ...

  9. python脚本实例手机端-用Python实现自动化操作Android手机

    本文原创作者:鲲之鹏(http://www.site-digger.com) 本文原始链接:http://www.site-digger.com/html/articles/20180912/664. ...

最新文章

  1. CVPR2020行人重识别算法论文解读
  2. shell之“/dev/null 21”
  3. mysql慢SQL探测与优化
  4. Heroku 的“得”与“失”
  5. 搜狗浏览器也可以直接安装Chrome插件,太棒了
  6. OpenStack精华问答 | OpenStack与计算虚拟化有什么关系?
  7. 一本通1613打印文章
  8. WORD如何取消文字下方花花绿绿的波浪线?
  9. linux多个文件打包命令行,linux命令五十七之tar命令;linux多个文件压缩打包到一个压缩文件...
  10. 科技正在淘汰传统行业,这次的“倒霉鬼”是券商
  11. 基于slate构建文档编辑器
  12. 恋爱APP软件开发基本功能
  13. 笔记本onenote绘画快捷键_怎样设置onenote的快捷键
  14. 网易云信 android,Android 网易云信集成(一)
  15. 精准控制的开关电脉冲表征GST薄膜的相变行为(2121.8.29,cyy)
  16. 直线和直线,直线和圆,直线和矩形的交点
  17. svn修改offline状态
  18. 调用高德接口查询经纬度(根据地址)
  19. 如何在厕所、垃圾桶或小树林捡一枚BCH?看完后我笑了...
  20. Linux下安装GPU显卡驱动

热门文章

  1. 获取分割后右边的字符串
  2. linux系统学习第一天
  3. 在SharePoint网站中访问Webservice被拒绝的解决方法
  4. [20170410]快速找回触发器内容.txt
  5. 【转】Oracle 执行动态语句
  6. Android 基础(十三) shape
  7. 一步一步教你写带图片注释的淡入淡出插件(四)
  8. 为Windows 服务器网络搬家
  9. 今天的但我发现了幸福的超级玛丽,白萝卜的种子
  10. 画面风格写实的飞鸽传书