python使用源文件_使用Python生成源文件的两种方法
利用Python的字符串处理模块,开发人员可以编写脚本用来生成那些格式相同的C、C++、JAVA源程序、头文件和测试文件,从而避免大量的重复工作。本文概述两种利用Python string类生成java源代码的方法。
1,String Template
Template是一个好东西,可以将字符串的格式固定下来,重复利用。Template也可以让开发人员可以分别考虑字符串的格式和其内容了,无形中减轻了开发人员的压力。Template属于string中的一个类,有两个重要的方法:substitute和safe_substitute。替换时使用substitute(),若未能提供模板所需的全部参数值时会发生异常。使用safe_substitute() 则会替换存在的字典值,保留未存在的替换符号。要使用的话可用以下方式调用:
Template有个特殊标示符$,它具有以下的规则:
(1)主要实现方式为$xxx,其中xxx是满足python命名规则的字符串,即不能以数字开头、不能为关键字等;
(2)如果$xxx需要和其他字符串接触时,用{}将xxx包裹起来;
开发人员通过编写template文件,并通过Template方法创建模板、substitute方法替换字符串即可快捷的生成所需的文件。编写template文件时一定要注意“$”的使用,因为Python会将以“$”开头的字符串理解成需要替换的变量。
2,replace
str.replace(old, new[, max])
Python replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。
模板文件tenplate.java(自:基于模板的简易代码生成器Python源码)
/**
* created since ${now}
*/
package mon.dal.ibatis;
import java.util.Date;
import junit.framework.Assert;
import mon.dal.daointerface.${testObject}DAO;
import mon.dal.dataobject.${testObject};
import com.alipay.sofa.runtime.test.AnnotatedAutowireSofaTestCase;
import mon.util.money.Money;
/**
* @author ${author}
* @version ${version}: MBIM_Service${testObject}_Device.java, ${now} ${author}
*/
public class Ibatis${testObject}DAOTester extends AnnotatedAutowireSofaTestCase {
@Override
public String[] getConfigurationLocations() {
return new String[] { "META-INF/spring/common-dal-db.xml",
"META-INF/spring/mobilespcore-common-dal-dao.xml", "META-INF/spring/common-dal.xml" };
}
@Override
public String[] getResourceFilterNames() {
return new String[] { "META-INF/spring/common-dal-db.xml" };
}
@Override
public String[] getWebServiceConfigurationLocations() {
return new String[] {};
}
private ${testObject}DAO get${testObject}DAO() {
${testObject}DAO dao = (${testObject}DAO) this.getBean("${testObjVarName}DAO", ${testObject}DAO.class, null);
return dao;
}
public void test${testObject}DAO() {
${testObject}DAO configDAO = get${testObject}DAO();
Assert.assertNotNull(configDAO);
}
public void test() {
${testObject}DO ${testObjVarName}DO = new ${testObject}DO();
${testObjVarName}DO.setGmtCreate(new Date());
${testObjVarName}DO.setGmtModified(new Date());
${testObjVarName}DO.setId(10000);
${testObject}DAO ${testObjVarName}DAO = get${testObject}DAO();
long result = ${testObjVarName}DAO.insert(${testObjVarName}DO);
Assert.assertTrue(result > 0);
}
}
Python代码
import os
import datetime
from string import Template
tplFilePath = 'D:\\Project\\Python\\code_gen\\template.java'
path = 'D:\\Project\\Python\\code_gen\\'
testObjList = ['Basic_connect',\
'Sms',\
'Phonebook',\
]
for testObj in testObjList:
testObjVarName = testObj[0].lower() + testObj[1:]
filename = 'MBIM_Service_' + testObj +'_device.java'
author = 'AidanZhang'
version='V0.1'
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
tplFile = open(tplFilePath)
gFile = open(path+filename ,"w")
'''
#method 1 with Template and substitute(safe_substitute)
lines=[]
tmp=Template(tplFile.read())
lines.append(tmp.substitute(
author = author,
now = now,
testObject = testObj,
testObjVarName = testObjVarName,
version = version))
gFile.writelines(lines)
'''
#Method 2, with replace
fileList = tplFile.readlines()
for fileLine in fileList:
line = fileLine.replace('${author}',author)\
.replace('${now}',now)\
.replace('${testObject}',testObj)\
.replace('${version}',version)\
.replace('${testObjVarName}',testObjVarName)
print line
gFile.writelines(line)
tplFile.close()
gFile.close()
print 'generate %s over. ~ ~' % (path+filename)
运行结果
generate D:\Project\Python\code_gen\MBIM_Service_Basic_connect_device.java over. ~ ~
generate D:\Project\Python\code_gen\MBIM_Service_Sms_device.java over. ~ ~
generate D:\Project\Python\code_gen\MBIM_Service_Phonebook_device.java over. ~ ~
python使用源文件_使用Python生成源文件的两种方法相关推荐
- Python的pip怎样更新到最新版本:两种方法!
Python的pip怎样更新到最新版本:两种方法! 方法一: 在管理员模式的控制台里输入下面这行命令 python -m pip install --upgrade pip 方法二: Anaconda ...
- 在word文档中如何自动生成目录,两种方法制作目录,总有一种适合你
在word文档中如何自动生成目录,两种方法制作目录,总有一种适合你 目录 在word文档中如何自动生成目录,两种方法制作目录,总有一种适合你 1.文章中的标题较多,每个单独调整格式太费劲,这里我们用一 ...
- C++生成GUID的两种方法
C++生成GUID的两种方法 C++生成GUID的两种方法 使用CoCreateGuid函数 使用Boost库 C++生成GUID的两种方法 GUID是软件开发中常用的组件,用于生成唯一的对象,在C# ...
- 用word2007自动生成目录的两种方法
用word2007自动生成目录的两种方法 看到很多人还在手工编写word的目录,感觉很浪费时间,下面跟大家分享一下,在word2007及word ...
- 怎么在python中添加文字_Python在图片中添加文字的两种方法
本文主要介绍的是利用Python在图片中添加文字的两种方法,下面分享处理供大家参考学习,下来要看看吧 一.使用OpenCV 在图片中添加文字看上去很简单,但是如果是利用OpenCV来做却很麻烦.Ope ...
- Python中按值来获取指定键的两种方法
Python字典中的键是唯一的,但不同的键可以对应同样的值,比如说uid,可以是1001.id同样可以是1001.这样的话通过值来获取指定的键,就不止一个!而且也并不太好处理.这里同样提供两种思路来处 ...
- python实现强智科技教务系统抢课(两种方法)
前言 又到了选课的时间,又一次被教务系统的预选给安排了,硬是一门都没选中.于是想实现有没有自动捡课的方法.就整体分为两种方法,一种是获取get请求然后由python多线程提交去选课,一种是利用自动化测 ...
- python爬虫(20)使用真实浏览器打开网页的两种方法
1.使用系统自带库 os 这种方法的优点是,任何浏览器都能够使用, 缺点不能自如的打开一个又一个的网页 import os os.system('"C:/Program Files/Int ...
- 数据湖 数据仓库 数据集市_还原数据仓库/数据集市环境的两种方法
数据湖 数据仓库 数据集市 Implementing best data warehouse designs and practices such as data lineage reduces th ...
- php 生成excel表格,PHP 生成Excel表格两种方法
1.使用PHP header()函数 (向浏览器输出Excel,即通过浏览器方式,下载生成的excel) 实例: /** * PHP 使用heade()函数生成excel表格 ExcelName为 ...
最新文章
- Optional 中的 map 和 flatMap
- pythontcp文件传输_python socket实现文件传输(防粘包)
- 添加错误debug信息
- stm32f103r6最小系统原理图_超强PCB布线设计经验谈附原理图
- 【转】ASP.NET内幕 - IIS处理模型
- 关于Jbulder2006的问题
- CentOS 7 安装 配置 Nginx + PHP
- 转:Django新手需要注意的10个要点
- 12306网站 =≈=泄露用户信息解读之撞库
- 我理解的国密知识与加密过程
- type-c速度测试软件,Type-C读写速度太慢 你真的使用了正确的方法了吗
- 紫装の槍使い(トゥーヴァ) / 紫枪(异时层土法)
- Python爬虫爬小说《诡秘之主》
- 将数字划分为素数的乘积
- php 跨站脚本,Piwigo register.php页面多个跨站脚本漏洞
- 大数据征信面临的挑战与对策
- HackTheBox 简单盒子 之 Horizontall (again,不简单)
- HCIE-2204-BGP
- 员工管理系统之添加修改删除操作
- 考公 or 直接找工作,该怎么选?
热门文章
- 小牛电动递交招股书:拟募资1.5亿美元 李一男持股44%
- java怎么用md5加密数据_JAVA 如何使用 MD5 和SHA1进行数据加密
- 教你轻松拿下百度音乐播放器mp3地址
- Scala进阶之路-并发编程模型Akka入门篇
- C++各大有名库的介绍——网络通信
- 【库】Generator:8行代码优雅解决异步嵌套
- [IOS之应用程序发布到苹果APP STORE完整流程]
- Go秒杀系统——RabbitMQ入门
- 大数据-玩转数据-Hive应用小结
- 源于Design Pattern Explanation with C++ Implementation的 设计模式 C++