小编写这篇文章,主要目的还是给大家讲一下关于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 Template
tempTemplate=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-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++程序代码了。
以上就是小编给大家总结的,关于python实现c++代码的相关事宜了,希望可以给各位读者带来更多的帮助下。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/127800.html
摘要:示例代码如下此示例中可以看出,当迭代器终止时,通过抛出异常告知迭代器已耗尽。但如果迭代器所指向的数据结构在其存在时发生了插入或删除操作,则迭代器将可能失效。与的情形类似,对进行任何插入操作也将损坏迭代器。 花下猫语:之前说过,我对于编程语言跟其它学科的融合非常感兴趣,但我还说漏了一点,就是我对于 Python 跟其它编程语言的对比学习,也很感兴趣。所以,我一直希望能聚集一些有其它语言基...
摘要:由于这个插件有式的程序返回值和运行时间的显示,我希望我的插件也具有这个功能。这个命令在后台其实会做很多事情,比如设置中的版本号添加版本标签并提交到版本库中。可以看到第一次提交插件的版本号为。 最近在学习Python,自然也安装了Atom编辑器的一些Python插件。有一个插件名字叫做atom-python-run,作用很简单,就是按F5运行当前Python文件。不过这个插件有一个问题,...
摘要:入门,第一个这是一门很新的语言,年前后正式公布,算起来是比较年轻的编程语言了,更重要的是它是面向程序员的函数式编程语言,它的代码运行在之上。它通过编辑类工具,带来了先进的编辑体验,增强了语言服务。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不觉已经到来了,总结过去的 2017,相信小伙们一定有很多收获...
摘要:入门,第一个这是一门很新的语言,年前后正式公布,算起来是比较年轻的编程语言了,更重要的是它是面向程序员的函数式编程语言,它的代码运行在之上。它通过编辑类工具,带来了先进的编辑体验,增强了语言服务。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不觉已经到来了,总结过去的 2017,相信小伙们一定有很多收获...
阅读 1137·2023-01-14 11:38
阅读 1131·2023-01-14 11:04
阅读 964·2023-01-14 10:48
阅读 2487·2023-01-14 10:34
阅读 1216·2023-01-14 10:24
阅读 1098·2023-01-14 10:18
阅读 716·2023-01-14 10:09
阅读 795·2023-01-14 10:02