[转]用Python做一个自动生成读表代码的小脚本

写在开始(本片文章不是写给小白的,至少你应该知道一些常识!)

大家在Unity开发中,肯定会把一些数据放到配置文件中,尤其是大一点的项目,每次开发一个新功能的时候,都要重复的写那些读表代码。非常烦。来个实用小工具,大家随便看看。

  1 #-*- coding: utf-8 -*-
  2 #----------------------------------------------------------#
  3 #   版本:python-3.5.0a3-amd64
  4 #   功能:生成读表代码文件
  5 #----------------------------------------------------------#
  6 import os
  7 import sys
  8 import re
  9 import string
 10 import codecs
 11
 12 templateFileName = "./template.cs"
 13 outputPathName = "./"
 14
 15 def InputFileName2RowClassName(_inputFileName):
 16     _className = ""
 17     _className = "Row_" + _inputFileName.split(".")[0]
 18     return _className
 19
 20 def InputFileName2TableClassName(_inputFileName):
 21     _className = ""
 22     _className = "Table_" + _inputFileName.split(".")[0]
 23     return _className
 24
 25 def InputFileName2FileName(_inputFileName):
 26     _className = ""
 27     _className = _inputFileName.split(".")[0]
 28     return _className
 29
 30 def GenerateRowFields(_type,_name,_desc):
 31     _returnValue = ""
 32     _returnValue += "\t//" + _desc + "\n"
 33     if _type.find("FLOAT")!=-1:
 34         _returnValue += "\tprivate float m_float" + _name + ";\n"
 35         _returnValue += "\tpublic float " + _name + "{get{return m_float" + _name + ";}}\n"
 36     if _type.find("STRING")!=-1:
 37         _returnValue += "\tprivate string m_string" + _name + ";\n"
 38         _returnValue += "\tpublic string " + _name + "{get{return m_string" + _name + ";}}\n"
 39     if _type.find("INT")!=-1:
 40         _returnValue += "\tprivate int m_int" + _name + ";\n"
 41         _returnValue += "\tpublic int " + _name + "{get{return m_int" + _name + ";}}\n"
 42     return _returnValue
 43
 44 def GenerateRowFunction(_type,_name,_desc,_i):
 45     _returnValue = ""
 46     if _type.find("FLOAT")!=-1:
 47         _returnValue = "\t\t\tm_float" + _name + " = float.Parse(strCols[i++]);\n"
 48     if _type.find("STRING")!=-1:
 49         _returnValue = "\t\t\tm_string" + _name + " = strCols[i++];\n"
 50     if _type.find("INT")!=-1:
 51         _returnValue = "\t\t\tm_int" + _name + " = Convert.ToInt32(strCols[i++]);\n"
 52     #print(_returnValue)
 53     return _returnValue
 54
 55 def GenerateFileds(_inputfilename):
 56     outputText = "";
 57     lineNum = 0
 58     listTypes = []
 59     listNames = []
 60     listDescs = []
 61     textFile = open( _inputfilename, "r", encoding= ‘utf-8‘ )
 62     for line in textFile.readlines():
 63         lineNum = lineNum + 1
 64         #只读前三行
 65         if lineNum <= 3:
 66             #第一行类型
 67             if lineNum == 1:
 68                 listTypes = line.strip().split("\t")
 69             #第二行名称
 70             if lineNum == 2:
 71                 listNames = line.strip().split("\t")
 72             #第三行注释
 73             if lineNum == 3:
 74                 listDescs = line.strip().split("\t")
 75     textFile.close()
 76     for i in range( 0, len(listTypes) ):
 77         outputText += GenerateRowFields(listTypes[i],listNames[i],listDescs[i])
 78     return outputText
 79
 80 def GenerateFromText(_inputfilename):
 81     outputText = "";
 82     lineNum = 0
 83     listTypes = []
 84     listNames = []
 85     listDescs = []
 86     textFile = open( _inputfilename, "r", encoding= ‘utf-8‘ )
 87     for line in textFile.readlines():
 88         lineNum = lineNum + 1
 89         #只读前三行
 90         if lineNum <= 3:
 91             #第一行类型
 92             if lineNum == 1:
 93                 listTypes = line.strip().split("\t")
 94             #第二行名称
 95             if lineNum == 2:
 96                 listNames = line.strip().split("\t")
 97             #第三行注释
 98             if lineNum == 3:
 99                 listDescs = line.strip().split("\t")
100     textFile.close()
101     for j in range( 0, len(listTypes) ):
102         #print(listTypes[j],listNames[j],listDescs[j],j)
103         outputText += GenerateRowFunction(listTypes[j],listNames[j],listDescs[j],j)
104     return outputText
105
106 #根据TXT生成客户端代码文件
107 def GenarateCodeByText(_inputfilename):
108     #templateFileName = "template.cs"
109     templateFile = open( templateFileName, "r" )
110     templateText = templateFile.read()
111     templateText = templateText.replace( "#{RowClass}", InputFileName2RowClassName(_inputfilename) )
112     templateText = templateText.replace( "#{Fileds}", GenerateFileds(_inputfilename) )
113     templateText = templateText.replace( "#{FromText}", GenerateFromText(_inputfilename) )
114     templateText = templateText.replace( "#{TableClass}", InputFileName2TableClassName(_inputfilename) )
115     templateText = templateText.replace( "#{FileName}", InputFileName2FileName(_inputfilename) )
116     templateFile.close()
117     return templateText
118
119 #自动写文件
120 def AutoWriteToFile(_inputfilename):
121     outputFileName = outputPathName + InputFileName2TableClassName(_inputfilename) + ".cs"
122     outputText = GenarateCodeByText(_inputfilename).encode("utf-8")
123     outputFile = open( outputFileName, "wb" )
124     outputFile.write(outputText)
125     outputFile.close()
126
127 #获取文件夹下所有文件路径
128 def walk(path):
129     f1 = os.listdir(path)
130     for f in f1:
131         #如果是子目录,则递归遍历
132         if f.find(".svn") == -1 and os.path.isdir(os.path.join(path,f)):
133             #walk(os.path.join(path,f))
134             None
135         else:
136             if f.find(".txt") != -1:
137                 t_name = os.path.join(path,f)
138                 listfilepath.append(t_name)
139     return listfilepath
140
141
142 listfilepath = []
143
144 if __name__ == ‘__main__‘:
145     if len(sys.argv) == 1:
146         listfilepath = walk("./")
147         print(len(listfilepath))
148         for files in listfilepath:
149             files = files.split("/")[-1]
150             print(files)
151             AutoWriteToFile(files)
152     sys.exit(0)

伸手党请看下面,大神们误喷,请绕行。

code

时间: 2024-08-06 11:56:14

[转]用Python做一个自动生成读表代码的小脚本的相关文章

设计一个自动生成棋盘格子的JS小程序

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 <script type="text/javascript"> 7 8 function chessboard(){ 9 rows=document.getElementById("text1").val

实现一个自动生成小学四则运算题目的命令行程序

Github项目地址:https://github.com/sumilekaedei/Myapp.git 题目:实现一个自动生成小学四则运算题目的命令行程序. 自然数:0, 1, 2, -. 真分数:1/2, 1/3, 2/3, 1/4, 1'1/2, -. 运算符:+, ?, ×, ÷. 括号:(, ). 等号:=. 分隔符:空格(用于四则运算符和等号前后). 算术表达式: e = n | e1 + e2 | e1 ? e2 | e1 × e2 | e1 ÷ e2 | (e), 其中e, e1

Python使用模板自动生成代码

整体思想: 完全按照自己的想法来写的,首先写模板文件,然后打开模板文件,对模板进行字符串格式化处理,最后再将格式化后的字符串保存到新的文件里面.如有更好的想法,欢迎交流. 将相似度很高的代码写模板文件(widget_template.txt): # -*- coding: UTF-8 -*- #!/usr/bin/env python #-------------------------------------------------------------------------------

Mockplus原型交互跟我做之1 - 30秒做一个自动消失的消息框(Toast)

从现在做,跟我一起来认识Mockplus的交互. Mockplus的交互,非常简单.直观.容易上手.你所需要做的,只是拖一拖鼠标,然后几步设置而已. 当然,只要你愿意,还可以实现强大的交互效果. 不废话,先来做一个,试试. 我们来做一个自动消失的消息框(Toast). 请看视频:

一个自动生成密码文件的小程序

1.写一个自动生成密码文件的程序 1.你输入几,文件里面就给你产生多少条密码 2.密码必须包括,大写字母.小写字母.数字.特殊字符 3.密码不能重复 4.密码都是随机产生的 5.密码长度6-11 方法一(自己写的) import random,stringf=open('pwd.txt','w') #w覆盖原来产生的文件num=input('请输入你要产生的密码个数:')s = set() while True: random_num=str(random.randint(1,999999))

iOS 手动做一个自动打包部署神器

之前使用的fastlane添加pgyer自动打包的,最近发现更新总是有问题,所以产生了自己shell做一个的想法.虽然代码比较少,但是很实用. 打包 导出ipa 上传pgyer 打包自动上传pgyer 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53

用Python做一个知乎沙雕问题总结

用Python做一个知乎沙雕问题总结 松鼠爱吃饼干2020-04-01 13:40 前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 数据森麟 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://t.cn/A6Zvjdun 这两天偶然上网的时候,被知乎上一个名为“玉皇大帝住在平流层还是对流层”的问题吸引,本以为只是小打小闹,殊不知这个问题却在知乎上引发了强烈共鸣,浏览次数500W+,

hibernate 自动生成数据库表

只要在hibernate.cfg.xml添加这句话,就可以自动生成数据表 <property name="hibernate.hbm2ddl.auto">update</property> update:表示自动根据model对象来更新表结构,启动hibernate时会自动检查数据库,如果缺少表,则自动建表:如果表里缺少列,则自动添加列. 还有其他的参数: create:启动hibernate时,自动删除原来的表,新建所有的表,所以每次启动后的以前数据都会丢失.

hibernate中.hbm.xml和注解方式自动生成数据表的简单实例(由新手小白编写,仅适用新手小白)

绝逼新手小白,so 请大神指点! 如果真的错的太多,错的太离谱,错的误导了其他小伙伴,还望大神请勿喷,大神请担待,大神请高抬贵嘴......谢谢. 好了,正题 刚接触ssh,今天在搞使用.hbm.xml文件 和 注解方式 来自动生成数据表 其中只是整了spring.hibernate,struts部分没有整.也就是说我只是测试了能够自动生成数据表(自动生成为"标准",自认为是对的......) 下面是配置和代码: 使用工具:myeclipse 2014 ,其中web project项目