python 代码转程序_[转]python 代码自动生成的方法 (代码生成器)

遇到的问题

工作中遇到这么一个事,需要写很多C++的底层数据库类,但这些类大同小异,无非是增删改查,如果人工来写代码,既费力又容易出错;而借用python的代码自动生成,可以轻松搞定;

(类比JAVA中的Hibernate自动生成的数据库底层操作代码)

下面介绍使用python字符串替换的方法;

Python字符串替换的几种方法

字符串替换

将需要替换的内容使用格式化符替代,后续补上替换内容;

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)

注:该方法适用于变量少的单行字符串替换;

字符串命名格式化符替换

使用命名格式化符,这样,对于多个相同变量的引用,在后续替换只用申明一次即可;

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 Template

tempTemplate = string.Template(“Hello name,yourwebsiteismessage”)

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-22

import os,sys,re,traceback

from datetime import datetime

from string import Template

class 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++程序代码了;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值