[轉]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”:”
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
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())
#模版替換
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++程式程式碼了;
相關推薦
程式碼自動生成工具(一)-Csv讀表程式碼自動生成工具
之前提到了自定義的Csv格式的表格讀取的一個工具類CsvReader 這裡我們實現一個可以對任意符合我們人為規定的格式的Csv檔案,自動生成其對應的讀表程式碼 本工具需要boost庫支援,本人用的是1.55.0 這裡首先定義Csv中支援的幾種列型別:FieldType:
ZZMonster一個方法自動生成Model(相容YYModel)
# ZZMonster(相容YYModel) 純程式碼編寫,無需安裝任何外掛,一個方法輕鬆搞定複雜Json轉Model。(相容[YYModel](https://github.com/ibireme/YYModel)) ### 示例: ### 1.下載[ZZ
靜態程式碼塊-程式碼塊-構造方法(父子類)執行順序
public class Fu { static { System.out.println("這是父類靜態程式碼塊"); } { System.o
python基礎操作_方法(函數)
形參 num 變參 可變參數 int 聲明 args 是個 如果 #函數,方法#普通方法def hello(): print(‘hello‘)hello()#帶形參的方法def hello1(name): print(‘hello%s‘%name)hello1(
[對抗訓練]20180117,Linux下自動生成flag(v0.1)
itl kill 查看 src nbsp 定時 ssl pla 用戶 [對抗訓練]20180117,Linux下自動生成flag (v0.1)設置目標靶機(Linux)定時生成flag的過程。在靶機終端登錄root用戶 使用命令 su ,然後輸入roo
厲害了,用Python實現自動掃雷!(附帶原始碼)
自動掃雷一般分為兩種,一種是讀取記憶體資料,而另一種是通過分析圖片獲得資料,並通過模擬滑鼠操作,這裡我用的是第二種方式。 學習Python中有不明白推薦加入交流群
[和小菜雞一起刷題(python)] LeetCode 91. 解碼方法 (Decode WAYS)
LeetCode 91. 解碼方法 (Decode WAYS) 原題 思路 程式碼 原題 一條包含字母 A-Z 的訊息通過以下方式進行了編碼: ‘A’ -> 1 ‘B’ -> 2 … ‘Z’ -> 26
python WordNet的使用方法(整理版)
那個,網上的不少相關內容的整理真的是難懂,而且不少錯誤,稍稍整理一下。 注:真是百度5小時,谷歌5分鐘……整理了這麼多中文資料,都缺的厲害,然後谷歌了一下,就發現了一個很不錯的材料,後面也整理一下。 python版本:Python 3.6.4 (v
資料庫文件自動生成工具(開放原始碼)
本人寫了一個數據庫文件自動生成工具,可以自動生成資料庫文件。 用java寫了個 客戶端介面: 輸入相關資訊後,可以自動生成資料庫文件: 模板支援自定義,點選“自定義模板?”按鈕,將新增的模板複製到該目錄下即可。
微信跳轉網頁讀取openid的方法(asp.net)
2.在微信公眾號請求使用者網頁授權之前,開發者需要先到公眾平臺官網中的“開發 - 介面許可權 - 網頁服務 - 網頁帳號 - 網頁授權獲取使用者基本資訊”的配置選項中,修改授權回撥域名。請注意,這裡填寫的是域名例如:www.qq.com,你必須配置成www.123.com
Python中的魔法方法(Magical Methond)
在python中,魔法方法是一種可以給類增加魔力的特殊方法,他們被雙下橫線所包圍,他們是面向物件的python的一切。python中的魔法方法可以在類定義的時候使用,如果你的物件實現或者過載了這些方法中的某一個,那麼這個方法會在特殊的時候被python所呼叫,在這個時候,你可
[轉]python 程式碼自動生成的方法 (程式碼生成器)
遇到的問題 工作中遇到這麼一個事,需要寫很多C++的底層資料庫類,但這些類大同小異,無非是增刪改查,如果人工來寫程式碼,既費力又容易出錯;而借用python的程式碼自動生成,可以輕鬆搞定; (類比JAVA中的Hibernate自動生成的資料庫底層操作程式碼
Mybatis -程式碼自動生成(generatorConfig.xml)配置資訊詳解
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1
ios拒審4.3 python自動生成辣雞程式碼
配置檔案config.json [ { "key" : "jiebabuyuxiniubuyu", "add_func_num" :1, "lua_in_path":"../../../..", "lua_out_p
python程式碼異常範圍檢查方法(非常實用)
對於python程式設計的程式碼,如果需要進行相應的檢查其中的錯誤或者異常,並且確定出現異常語句的大致範圍,主要有以下四種方法: 1、第一種方法:遇錯即止(告知原因) try ......(所需檢查語句) ......(出錯語句) ......(後面的程式碼)%將不進行執行
Springboot 自動生成實體程式碼 屬性帶註釋(未優化) 詳細步驟(一)
框架:springboot+codemodel 自動生成實體程式碼 ①引入codemodel的jar <!-- https://mvnrepository.com/artifact/com.sun.codemodel/codemodel-project --> <dep
spring boot 整合 mybatis(含程式碼自動生成)
環境簡介:Idea ,JDK8,MAVEN 開工: 第一步建立專案 第二步選擇maven依賴 第三步,補充自己需要用到的maven依賴(通過工具沒法自動完成的) <?xml version="1.0" encoding="UTF-8"?> <project xmlns="
少說話多寫程式碼之Python學習054——類的成員(生成器的方法和模擬生成器))
我們看看生成器的呼叫以及內部響應, 外部訪問生成器的send方法,類似於我們方位迭代器的next方法。 內部響應的過程是,yield作為表示式使用。生成器重新執行時,yield方法返回一個值,如果send方法被使用,則返回none。 比如這樣的過程, def repeater(value):
Spring Boot (七)MyBatis程式碼自動生成和輔助外掛
一、簡介 1.1 MyBatis Generator介紹 MyBatis Generator 是MyBatis 官方出品的一款,用來自動生成MyBatis的 mapper、dao、entity 的框架,讓我們省去規律性最強的一部分最基礎的程式碼編寫。 1.2 MyBatis Generator使用 MyBat
Mybatis最入門---程式碼自動生成(generatorConfig.xml配置)
第一種方式:通過Main方法執行配置檔案。 -------------------------------------------------------------------------------------------------------------------------------------