利用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生成源文件的两种方法相关推荐

  1. Python的pip怎样更新到最新版本:两种方法!

    Python的pip怎样更新到最新版本:两种方法! 方法一: 在管理员模式的控制台里输入下面这行命令 python -m pip install --upgrade pip 方法二: Anaconda ...

  2. 在word文档中如何自动生成目录,两种方法制作目录,总有一种适合你

    在word文档中如何自动生成目录,两种方法制作目录,总有一种适合你 目录 在word文档中如何自动生成目录,两种方法制作目录,总有一种适合你 1.文章中的标题较多,每个单独调整格式太费劲,这里我们用一 ...

  3. C++生成GUID的两种方法

    C++生成GUID的两种方法 C++生成GUID的两种方法 使用CoCreateGuid函数 使用Boost库 C++生成GUID的两种方法 GUID是软件开发中常用的组件,用于生成唯一的对象,在C# ...

  4. 用word2007自动生成目录的两种方法

                                用word2007自动生成目录的两种方法 看到很多人还在手工编写word的目录,感觉很浪费时间,下面跟大家分享一下,在word2007及word ...

  5. 怎么在python中添加文字_Python在图片中添加文字的两种方法

    本文主要介绍的是利用Python在图片中添加文字的两种方法,下面分享处理供大家参考学习,下来要看看吧 一.使用OpenCV 在图片中添加文字看上去很简单,但是如果是利用OpenCV来做却很麻烦.Ope ...

  6. Python中按值来获取指定键的两种方法

    Python字典中的键是唯一的,但不同的键可以对应同样的值,比如说uid,可以是1001.id同样可以是1001.这样的话通过值来获取指定的键,就不止一个!而且也并不太好处理.这里同样提供两种思路来处 ...

  7. python实现强智科技教务系统抢课(两种方法)

    前言 又到了选课的时间,又一次被教务系统的预选给安排了,硬是一门都没选中.于是想实现有没有自动捡课的方法.就整体分为两种方法,一种是获取get请求然后由python多线程提交去选课,一种是利用自动化测 ...

  8. python爬虫(20)使用真实浏览器打开网页的两种方法

    1.使用系统自带库  os 这种方法的优点是,任何浏览器都能够使用, 缺点不能自如的打开一个又一个的网页 import os os.system('"C:/Program Files/Int ...

  9. 数据湖 数据仓库 数据集市_还原数据仓库/数据集市环境的两种方法

    数据湖 数据仓库 数据集市 Implementing best data warehouse designs and practices such as data lineage reduces th ...

  10. php 生成excel表格,PHP 生成Excel表格两种方法

    1.使用PHP header()函数  (向浏览器输出Excel,即通过浏览器方式,下载生成的excel) 实例: /** * PHP 使用heade()函数生成excel表格  ExcelName为 ...

最新文章

  1. Optional 中的 map 和 flatMap
  2. pythontcp文件传输_python socket实现文件传输(防粘包)
  3. 添加错误debug信息
  4. stm32f103r6最小系统原理图_超强PCB布线设计经验谈附原理图
  5. 【转】ASP.NET内幕 - IIS处理模型
  6. 关于Jbulder2006的问题
  7. CentOS 7 安装 配置 Nginx + PHP
  8. 转:Django新手需要注意的10个要点
  9. 12306网站 =≈=泄露用户信息解读之撞库
  10. 我理解的国密知识与加密过程
  11. type-c速度测试软件,Type-C读写速度太慢 你真的使用了正确的方法了吗
  12. 紫装の槍使い(トゥーヴァ) / 紫枪(异时层土法)
  13. Python爬虫爬小说《诡秘之主》
  14. 将数字划分为素数的乘积
  15. php 跨站脚本,Piwigo register.php页面多个跨站脚本漏洞
  16. 大数据征信面临的挑战与对策
  17. HackTheBox 简单盒子 之 Horizontall (again,不简单)
  18. HCIE-2204-BGP
  19. 员工管理系统之添加修改删除操作
  20. 考公 or 直接找工作,该怎么选?

热门文章

  1. 小牛电动递交招股书:拟募资1.5亿美元 李一男持股44%
  2. java怎么用md5加密数据_JAVA 如何使用 MD5 和SHA1进行数据加密
  3. 教你轻松拿下百度音乐播放器mp3地址
  4. Scala进阶之路-并发编程模型Akka入门篇
  5. C++各大有名库的介绍——网络通信
  6. 【库】Generator:8行代码优雅解决异步嵌套
  7. [IOS之应用程序发布到苹果APP STORE完整流程]
  8. Go秒杀系统——RabbitMQ入门
  9. 大数据-玩转数据-Hive应用小结
  10. 源于Design Pattern Explanation with C++ Implementation的 设计模式 C++