天天看點

【轉載】 python 生成C++模闆代碼

轉載:https://blog.csdn.net/weixin_30245867/article/details/98950730

轉載:https://blog.csdn.net/phunxm/article/details/34917371

背景:

在開發過程中,會出現一些 統一代碼結構的寫法;這些類大同小異,如果人工來寫代碼,既費力又容易出錯;而借用python的代碼自動生成,可以輕松搞定;

模版方法替換

使用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 [email protected] 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())
 
        #模版替換
        # substitute 會報錯 沒有比對到的數值;safe_substitute 會将沒有比對到的資料 原封不動展示出來
        lines.append(tmpl.safe_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()
           

python字元串模闆中的KeyError

【轉載】 python 生成C++模闆代碼