python怎么实现自动生成C++代码的代码生成器
这篇文章主要讲解了“python怎么实现自动生成C++代码的代码生成器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python怎么实现自动生成C++代码的代码生成器”吧!
遇到的问题
工作中遇到这么一个事,需要写很多C++的底层数据库类,但这些类大同小异,无非是增删改查,如果人工来写代码,既费力又容易出错;而借用python的代码自动生成,可以轻松搞定;
(类比JAVA中的Hibernate自动生成的数据库底层操作代码)
下面介绍使用python字符串替换的方法;
Python字符串替换的几种方法
1. 字符串替换
将需要替换的内容使用格式化符替代,后续补上替换内容;
template = "hello %s , your website is %s " % ("大CC","http://blog.me115.com")print(template)
也可使用format函数完成:
template = "hello {0} , your website is {1} ".format("大CC","http://blog.me115.com")print(template)
注:该方法适用于变量少的单行字符串替换;
2. 字符串命名格式化符替换
使用命名格式化符,这样,对于多个相同变量的引用,在后续替换只用申明一次即可;
template = "hello %(name)s ,your name is %(name), your website is %(message)s" %{"name":"大CC","message":"http://blog.me115.com"}print(template)
使用format函数的语法方式:
template = "hello {name} , your name is {name}, your website is {message} ".format(name="大CC",message="http://blog.me115.com")print(template)
注:适用相同变量较多的单行字符串替换;
3.模版方法替换
使用string中的Template方法;
from string import TemplatetempTemplate = string.Template("Hello $name ,your website is $message")print(tempTemplate.substitute(name='大CC',message='http://blog.me115.com'))
有了模版方法后,就可以将模版保存到文件单独编辑,在生成的地方替换为需要的变量;
示例:代码生成
这个示例使用以上讲到的第三种方法;
建立一个模版文件,里面需要替换的内容使用${}变量替换;
dao_cpp.template
////// @class ${CLASSNAME}/// @brief Redis底层接口类 操作${TABLE_NAME}表/// TABLE ${TABLE_NAME_UPPER}/// @author dao_cpp_generator.py/// @generate date: ${GENE_DATE}/// [注:本文件为自动生成,不需要人为编辑,若有修改,请通过配置py脚本来重新生成.]#include "${CLASSNAME}.h"#include "include/${TABLE_NAME}_t.h"#include "RedisManager.h"#include "common/LogMacros.h"#include "common/StringUtility/OtherStringFunc.h"#include "common/DateTime.h"namespace redisdao{#define PRIMARY_KEY "${PRIMER_KEY}"const string ${CLASSNAME}::TABLE_NAME = "${TABLE_NAME}";const string ${CLASSNAME}::TABLE_ID = "${TABLE_ID}"; //在数据库中的表的唯一性标识符const string ${CLASSNAME}::KEY_SEPARETER = "${KEY_SEPARETER}";${CLASSNAME}::${CLASSNAME}(void){ if ( 0 == m_reHandler.EnsureConnect()) m_bRedisConnected = true; else m_bRedisConnected = false;}${CLASSNAME}::~${CLASSNAME}(void){}int ${CLASSNAME}::InsertRecord(const string& strVal)...
python代码生成程序:
cpp_generator.py
#! /usr/bin/env python#coding=utf-8#Redis底层操作类CPP文件生成程序(*RedisDao.cpp)#author me115@126.com 2014-7-22import os,sys,re,tracebackfrom datetime import datetimefrom string import Templateclass DaoCppGenerator: def generate(self): tableName = 'students' className = '%sRedisDao' % tableName.capitalize() filePath = r'include/%s.cpp' % className class_file = open(filePath,'w') lines = [] #模版文件 template_file = open(r'dao_cpp.template','r') tmpl = Template(template_file.read()) #模版替换 lines.append(tmpl.substitute( CLASSNAME = className, TABLE_NAME = tableName, TABLE_NAME_UPPER = tableName.upper(), GENE_DATE = datetime.now().strftime('%Y-%m-%d %H:%M:%S'), TABLE_ID = '115', EXPIRE_DATE = '06JUN14')) # 0.将生成的代码写入文件 class_file.writelines(lines) class_file.close() print 'generate %s over. ~ ~' % filePath
感谢各位的阅读,以上就是“python怎么实现自动生成C++代码的代码生成器”的内容了,经过本文的学习后,相信大家对python怎么实现自动生成C++代码的代码生成器这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341