从自动生成.h的头文件集合和类声明集合到用python读写文件

最近在用python自动生成c++的类.因为这些类会根据需求不同产生不同的类,所以需要用python自动生成.由于会产生大量的类,而且这些类是变化的.所以如果是在某个.h中要用include来加载这些类,会累死人的.所以用python来生成这些类的头文件引用和类的类名声明

先看例子,再聊python的读写文件的代码 在聊聊我的python代码

------------------------>

好吧.上面的图就是面临的需求

下面来聊聊从网上找的读写文件的python代码吧.csdn的一个博主写的很详细.  python如何读写文件:http://blog.csdn.net/adupt/article/details/4435615

仔细阅读完博主的讲解后,有这么一段

file_object = open(‘thefile.txt‘)
try:
     all_the_text = file_object.read( )
finally:
     file_object.close( )

针对上面的这段代码我会在来个说明 关于 try except finally with 等的帖子 <python中的 try except finally with>

恩.好了,下面把我的python代码也就是实现最开始的截图的代码放这里 供自己以后类似的情况来参考

 1 #!/usr/bin/python                                   #此文件是自动生成头文件声明的python脚本
 2 # -*- encoding: utf-8 -*-
 3 import os
 4
 5 def generateRecordsHeaderInclude(folderPath):
 6
 7     try:
 8         filePath = os.path.join(folderPath,"misc_records.h")
 9         with open(filePath, "w") as file:
10             recordsFolderPath = os.path.join(folderPath, ‘records‘) #E:\fare_uuid\misc\include\misc\records  存放生成的类的.h
11             includeNames = os.listdir(recordsFolderPath)  #获取records文件夹下的所有文件名
12             #写c++代码
13             file.write("#ifndef MISC_MISC_RECORDS_H_\n")
14             file.write("#define MISC_MISC_RECORDS_H_\n")
15             file.write("\n//Records\n")
16
17             for includeName in includeNames:
18                 file.write(‘#include "misc/records/%s"\n‘ % includeName)
19
20             file.write("#endif /* MISC_MISC_RECORDS_H_ */")
21     except:
22         print "create file %s\\misc_records.h error" % folderPath
23         return
24
25     print "create file %s\\misc_records.h success!" % folderPath
26
27
28
29 if __name__ == ‘__main__‘:
30     homedir = r"E:\farestar_uuid\misc"
31     folderPath = os.path.join(homedir, ‘include‘, ‘misc‘)
32     print ‘folderPath = ‘ + folderPath
33
34     generateRecordsHeaderInclude(folderPath)  #E:\farestar_uuid\misc\include\misc
 1 #!/usr/bin/python                                       #此文件是自动生成c++类的类名声明的python脚本
 2 # -*- encoding: utf-8 -*-
 3 import os
 4
 5 def getStructName(recFilePath, fwdFilePath):
 6     try:
 7         with open(recFilePath, ‘r‘) as file:
 8             for line in file:
 9                 if ‘struct‘ in line and ‘: public MiscObject‘ in line:
10                     words = line.split(" ")
11                     structIndex = words.index(‘struct‘)    # 类名里面是    struct xxx : public MiscObject 所以读到这一行的时候就拆解处 类名来
12                     return words[structIndex+1]
13     except:
14         print ‘read %s error‘ % filePath
15         print ‘create %s error‘ % fwdFilePath
16         raise RuntimeError("create %s error in genRecordsStructDeclare.py" % fwdFilePath)
17
18
19 def generateRecordsStructDeclare(folderPath):
20     try:
21         fwdFilePath = os.path.join(folderPath,"misc_fwd.h")  #类名声明的头文件
22         with open(fwdFilePath, "w") as file:
23             recordsFolderPath = os.path.join(folderPath, ‘records‘)  #所以的类名的.h文件在records文件夹下
24             recFileNames = os.listdir(recordsFolderPath)
25
26
27             file.write("#ifndef MISC_MISC_FWD_H_\n")
28             file.write("#define MISC_MISC_FWD_H_\n")
29
30             file.write(‘#include "misc/miscid.h"\n‘)
31             file.write(‘#include "misc/miscerrorcode.h"\n‘)
32             file.write(‘namespace misc\n‘)
33             file.write(‘{\n‘)
34             for recFileName in recFileNames:
35                 recFilePath = os.path.join(recordsFolderPath, recFileName)  #xxxx/recors/agency.h
36                 structName = getStructName( recFilePath,  fwdFilePath)
37                 file.write(‘    struct %s;\n‘ % structName)  #生成一行类名声明
38             file.write(‘}\n‘)
39
40             #file.write(‘#include "misc/records/%s"\n‘ % includeName)
41
42             file.write("#endif /* MISC_MISC_FWD_H_ */")
43     except:
44         print "create file %s error" % fwdFilePath
45         return
46
47     print "create file %s success!" % fwdFilePath
48
49
50
51 if __name__ == ‘__main__‘:
52     homedir = r"E:\farestar_uuid\misc"
53     folderPath = os.path.join(homedir, ‘include‘, ‘misc‘)
54     print ‘folderPath = ‘ + folderPath
55
56     generateRecordsHeaderInclude(folderPath)
时间: 2024-12-21 10:05:15

从自动生成.h的头文件集合和类声明集合到用python读写文件的相关文章

使用工具自动生成hibernate的配置文件、实体类与连接数据库

注:图前文字是解释图中的内容. 一.导包 新建一个项目,将hibernate和mysql的jar包导入,放到项目中lib文件夹中,如果没有lib可以自己建一个. hibernate需导入的jar包位置:\hibernate-release-5.2.6.Final\lib\required\"复制粘贴里面所有的" 数据库的jar找到自己存储位置,位置粘贴 二.窗口--显示视图--打开Hibernate Configurations--在Hibernate Configurations的空

[JNI开发]使用javah命令生成.h的头文件

第一步:进入对应的.java目录 javac xxx.java 生成对应的xxx.class文件 第二步:退回到/java目录 javah -classpath . -jni 包名.类名 原文地址:https://www.cnblogs.com/lx17746071609/p/11896813.html

mybatis自动生成mapper.xml和接口实体类工具

mybatis的mapper.xml和实体类那些都是死的,今天接触到一个工具,只需要简单配置,然后就可以mybatis的数据库xml文件和接口和实体类,而且sql语句很全哦! 它是通过一个java包和配置文件生成的: 然后按照generator.xml配置里面的提示文件生成的目录写到那个src上面,淡然注意里面的数据库配置要和你项目的那个数据库配置文件一样,名字注意和平时数据库.实体类命名规则一样就可以: 然后双击那个批处理文件就可以生成那两个文件了: http://download.csdn.

安卓实战开发之JNI入门及高效的配置(android studio一键生成.h,so及方法签名)

前言 以前也讲过NDK开发,但是开始是抱着好玩的感觉去开始的,然后呢会helloWord就觉得大大的满足,现在静下来想这NDK开发到底是干什么呢? NDK开发,其实是为了项目需要调用底层的一些C/C++的一些东西:另外就是为了效率更加高效些但是在java与C相互调用时平白又增大了开销(其实效率不见得有所提高),然后呢,基于安全性的考虑也是为了防止代码被反编译我们为了安全起见,使用C语言来编写这些重要的部分来增大系统的安全性,最后呢生成so库便于给人提供方便. 好了,我们来看一下qq的结构,我们就

自动生成依赖关系(十)

我们在之前的 makefile 学习中,其目标文件(.o)只依赖于源文件(.c).那么如果在源文件中还包含有头文件,此时编译器如何编译源文件和头文件呢?我们来看看编译行为带来的缺陷:1.预处理器将头文件中的代码直接插入源文件:2.编译器只通过预处理后的源文件产生目标文件:3.规则中以源文件为依赖,命令就可能无法执行. 我们来看看下面的 makefile 有没有问题 makefile 源码 OBJS := func.o main.o hello.out : $(OBJS)     @gcc -o 

make--变量与函数的综合示例 自动生成依赖关系

一.变量与函数的示例 示例的要求1.自动生成target文件夹存放可执行文件2.自动生成objs文件夹存放编译生成的目标文件3.支持调试版本的编译选项4.考虑代码的扩展性完成该示例所需的1.$(wildcardpattern)获取当前工作目录中满足pattern的文件或目录列表2.$(addprefix,_name)给名字列表name的每一个名字增加前缀_prefix关键技巧1.自动获取当前目录下的源文件列表(函数调用) SRC : = $(wildcard *.c) 2.根据源文件列表生成目标

自动生成控制器

生成Admin模块的目录,并生成一个默认的控制器类Admin\Controller\IndexController. 如果需要生成更多的控制器类,可以定义BUILD_CONTROLLER_LIST常量,例如: // 绑定Admin模块到当前入口文件 define('BIND_MODULE','Admin'); define('BUILD_CONTROLLER_LIST','Index,User,Menu'); define('APP_PATH','./Application/'); requir

微软Connect教程系列--自动生成增删改查页面工具介绍(二)

本章课程描述了vs2015的三个特点,其中主要将描述在vs2015下面,使用命令自动生成增删改查界面,具体如下: 1.web.config文件不在存在,用config.json替代,以适应支撑vs的插件化. 即config.json可以在项目中不存在,你可以用xml文件或其他方式创建数据库连接. 2.获取nuget包更便捷 打开project.json,在dependencies节点输入“Newtonsoft.json”,并选择好相应版本,保存后,vs的引用就会自动从nuget上下载newton

MFC:“Debug Assertion Failed!” ——自动生成的单文档程序项目编译运行就有错误

今天照着孙鑫老师的VC++教程学习文件的操作,VS2010,单文档应用程序,项目文件命名为File,也就有了自动生成的CFileDoc.CFileView等类,一进去就编译运行(就是最初自动生成的项目),编译通过,可运行时直接弹出错误框,有点小懵,,,啥都没做就给我看这个: 图一   错误提示框 后来搜索一查,网上好多类似的错误以及解决方案,几乎都试了个遍,有: 方法(1)-重新生成解决方案,或者将项目文件目录下Debug文件夹删了,重新生成Release版: 方法(2)-可以先声明一个临时的C