博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 自动生成C++代码 (代码生成器)
阅读量:6345 次
发布时间:2019-06-22

本文共 3155 字,大约阅读时间需要 10 分钟。

python 代码自动生成的方法 (代码生成器)

遇到的问题

工作中遇到这么一个事,需要写很多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

有了这个程序,再配合一堆XML配置文件,就可以轻松生成各种C++程序代码了;

Posted by: 大CC | 25JUL,2014

博客: []
微博:

转载地址:http://xlcla.baihongyu.com/

你可能感兴趣的文章
CentOS查看系统信息-CentOS查看命令
查看>>
Oracle 客户端安装
查看>>
洛谷 P1744(迪杰斯特拉)
查看>>
win7 配置IIS + php 环境
查看>>
[UML]UML系列——用例图中的各种关系(include、extend)
查看>>
若要调试此模块,请将其项目生成配置更改为“调试”模式。若要取消显示此消息,请禁用“启动时若没有用户代码则发出警告”调试器选项。...
查看>>
08.Python网络爬虫之图片懒加载技术、selenium和PhantomJS
查看>>
java_socket套接字网络编程_实现多线程聊天
查看>>
SpringMVC + Spring + MyBatis 学习笔记:在类和方法上都使用RequestMapping如何访问
查看>>
[转载]使用RoboCopy 命令
查看>>
清楚浮动的应用
查看>>
spring cloud学习(五) 配置中心
查看>>
Oracle误删除表空间的恢复
查看>>
C++的继承与多态
查看>>
CSS3 Border-image
查看>>
洛谷P4769 冒泡排序
查看>>
固定思维的可怕(转)
查看>>
pimple idiom C++
查看>>
关于Session为null的问题。。。
查看>>
新的开始,一切归零
查看>>