目标

完成一个python脚本,实现指定名字后,自动生成.c和.h的模板。例如:

/**
* @file epc.c
* @author 陈维
* @version V01
* @date 2017.01.11
* @brief epc芯片驱动
* @note
*
* @attention COYPRIGHT INMOTION ROBOT
*/

代码

# ctemplate.py

import sys
import datetime class ctemplate: __fileName = ' '
__sourceName = ' '
__headerName = ' '
__time = datetime.datetime.now().strftime('%Y.%m.%d')
__fileComments = {'@attention':'COPYRIGHT WEYNE',
'@note':' ',
'@brief':' ',
'@date':__time,
'@version':'V01',
'@author':'Weyne Chen',
'@file':" ",
} __CommentsOrder = ('@file','@author','@version','@date','@brief','@note','@attention') def __init__(self,s):
self.__fileName = s
self.__sourceName = s + ".c"
self.__headerName = s + '.h' def generateCommentsAtTop(self,name):
self.__fileComments['@file'] = name comments = ('/**\n') #find max length of string
maxLen = 0
for s in self.__CommentsOrder:
if(len(s) > maxLen):
maxLen = len(s) for k in self.__CommentsOrder:
alignSpaceAmount = maxLen - len(k) + 4
alignSpace = alignSpaceAmount * ' '
comments += ('* '+ k + alignSpace + self.__fileComments[k] + '\n') comments += ('**/\n\n') return comments def generateCommentsInTheEnd(self):
return ("/********************* (C) COPYRIGHT WEYNE CHEN *******END OF FILE ********/\n") def createSource(self):
fh = open(self.__sourceName,mode = 'w',encoding='utf-8')
cm = self.generateCommentsAtTop(self.__sourceName)
cm += ("#include \"%s\"\n" %self.__headerName)
cm += ("\n"*5)
cm += self.generateCommentsInTheEnd()
fh.write(cm)
fh.close() def createHeader(self):
fh = open(self.__headerName,mode = 'w',encoding='utf-8')
cm = self.generateCommentsAtTop(self.__headerName)
cm += "#ifndef __%s_H\n" %self.__fileName.upper()
cm += "#define __%s_H\n" %self.__fileName.upper()
cm += ("\n"*5)
cm += "#endif\n"
cm += self.generateCommentsInTheEnd()
fh.write(cm)
fh.close() def createTemplatePairs(self):
self.createSource()
self.createHeader() if __name__ == '__main__':
if len(sys.argv) != 2:
sys.stderr.write("please input corret parameter")
else:
s = sys.argv[1]
ct = ctemplate(s)
ct.createTemplatePairs()

在CMD中执行 python ctemplate.py test之后,会生成test.c和test.h文件,并已经添加部分描述内容。效果如下:

test.c

/**
* @file test.c
* @author Weyne Chen
* @version V01
* @date 2017.01.19
* @brief
* @note
* @attention COPYRIGHT WEYNE
**/ #include "test.h" /********************* (C) COPYRIGHT WEYNE CHEN *******END OF FILE ********/

test.h

/**
* @file test.h
* @author Weyne Chen
* @version V01
* @date 2017.01.19
* @brief
* @note
* @attention COPYRIGHT WEYNE
**/ #ifndef __TEST_H
#define __TEST_H #endif
/********************* (C) COPYRIGHT WEYNE CHEN *******END OF FILE ********/

总结

需要注意python字典在迭代器输出时,不是按输入顺序输出的。因为其存储过程实际是散列的,所以输出的顺序是不定的。若是想要顺序输出,只能使用list或者给dict增加一个tuple,并将key值存储到tuple中。

使用python生成c文件模板的更多相关文章

  1. Python生成pyc文件

    Python生成pyc文件 pyc文件是py文件编译后生成的字节码文件(byte code).pyc文件经过python解释器最终会生成机器码运行.所以pyc文件是可以跨平台部署的,类似Java的.c ...

  2. windows平台 python生成 pyd文件

    Python的文件类型介绍: .py       python的源代码文件 .pyc     Python源代码import后,编译生成的字节码 .pyo     Python源代码编译优化生成的字节 ...

  3. VNPY加密教程(Python生成pyd文件)

    安装成功之后,再修改设置.让Cython可以找到vcarsall.bat.此处有两种方案.(我采用方案1,亲测可用.方案2未测试,看似可用.) 方案1:修改Python安装目录的文件设置 window ...

  4. Python生成pyd文件

    Python的脚本文件是开源的,量化策略的安全性没有保障.因此需要保护源码.那么要对Python代码进行混淆.加密保护. 混淆代码,我准备使用pyminifier.而加密处理,就比较麻烦. Pytho ...

  5. python 生成 pyc 文件

    以 pyc 为扩展名的是Python的编译文件.其执行速度快于 py 文件且不能用文本编辑编辑查看.所以 pyc 文件往往代替 py 文件发布. Python 在执行时,首先会将 py 文件中的源代码 ...

  6. python生成xml文件

    先上代码: #!/usr/bin/env python3 # _*_ coding: utf-8 _*_ from xml.dom.minidom import Document def readFi ...

  7. Python生成gexf文件并导入gephi做网络图分析

    Gephi是一款优秀的复杂网络分析软件,支持导入多种格式的文件.gexf格式是Gephi 推荐的格式,基于 XML.本文是一个用python写的简单Demo,示例如何生成一个典型的gexf格式文件.代 ...

  8. python 生成 xml文件 属性的顺序问题

    需求很奇葩. 文档示例 <ITEM key="username" eng="User Name" chn="用户名" val=&quo ...

  9. python生成html文件浏览器中文显示乱码问题

    近来在网上采集数据,想把采集下来的数据整合成html的形式保存.以便其他的平台产品可以直接读取html显示或者根据html标签提取数据. def output_html(self): try: fou ...

随机推荐

  1. js hover 下拉框

    <div class="box"> <div class="a f">111111</div> <div class= ...

  2. opencv加载图片和视频

    一.加载图片: 1.先放一段最简单的加载图片的代码 import cv2 as cv #引用opencv库image = "D:/Image/test.jpg" #确定图片所在路径 ...

  3. maven打包oracle jdbc驱动

    背景 由于版权问题,maven中央仓库缺少oracle jdbc的驱动,这个给开发带来了很多不便利性.也出现各种各样的解决方案,基本就两种思路: 将oracle驱动安装到本地仓库,这个需要大家统一好名 ...

  4. python基础知识07-函数作用域和匿名函数

    1.匿名函数 list(filter(lamda a:a>3,[1,2,3,4,5])) 一般和过滤器一起使用 2.函数的作用域 a = 123 def test(): a = 666 a = ...

  5. 一个关于vue+mysql+express的全栈项目(三)------ 登录注册功能的实现(已经密码安全的设计)

    本系列文章,主要是一个前端的视角来实现一些后端的功能,所以不会讲太多的前端东西,主要是分享做这个项目学到的一些东西,,,,, 好了闲话不多说,我们开始搭建后端服务,这里我们采用node的express ...

  6. POJ 1979 Red and Black (DFS)

    Description There is a rectangular room, covered with square tiles. Each tile is colored either red ...

  7. winfor应用程序打印报表清单

    最近一周竟然有2位以前的同事问我在winfor应用程序里面打印怎么搞,所以才有了写这篇文章的打算,索性现在没事就写出来 在窗体上简单的布局设置一下如图 定义一个Model 我在里面放了属性之外还从写了 ...

  8. 【07】Firebug监控网络情况

    [07] Firebug监控网络情况 Firebug可以监控网页中每个文件加载的时间. 打开Firebug.点击"网络",然后确定已经启用,重新载入当前页面.Firebug显示如下 ...

  9. 返回json格式的数据

  10. xtu summer individual 1 E - Palindromic Numbers

    E - Palindromic Numbers Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %l ...