1. 程式人生 > >[轉]python 程式碼自動生成的方法 (程式碼生成器)

[轉]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)

注:該方法適用於變數少的單行字串替換;

  1. 字串命名格式化符替換
    使用命名格式化符,這樣,對於多個相同變數的引用,在後續替換隻用申明一次即可;

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 n

ame,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 [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下自動生成flagv0.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方法執行配置檔案。 -------------------------------------------------------------------------------------------------------------------------------------