最近项目需要,针对主项目提取一个小的基础版本,供于在新建项目时使用,所以就有这个python模板生成脚本,其作用如下:
1、通过配置文件来控制模板中的数据、格式化的过滤条件
2、执行后会把目录下所有的文件都会执行一篇
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
#!/usr/bin/python #encoding: utf-8 import json import codecs import os def get_files(root_path): for dir in os.walk(root_path): if dir [ 2 ]: for nf in dir [ 2 ]: yield os.path.join( dir [ 0 ], nf) def exclude_filter(exclude, nfile): files_path = exclude.get( 'file_path' ) files_name = exclude.get( 'file_name' ) base_name = os.path.basename(nfile) exts_name = exclude.get( 'ext_name' ) base_ext_name = base_name.rsplit( "." , 1 )[ 1 ] if files_path: for npath in files_path: if npath = = nfile: return True elif files_name: for name in files_name: print name, base_name if name = = base_name: return True elif exts_name: for name in exts_name: print name, base_ext_name if name = = base_ext_name: return True def include_filter(include, nfile): files_path = include.get( 'file_path' ) files_name = include.get( 'file_name' ) base_name = os.path.basename(nfile) if files_path: for npath in files_path: if npath = = nfile: return True elif files_name: for name in files_name: if name = = base_name: return True def main(): # read config config = {} with codecs. open ( "config.json" , "rb" , "UTF-8" ) as f: config = json.loads(f.read()) if not config: return template = config.get( "template" ) if template and template.get( 'path' ): root_path = template.get( 'path' ) if not os.path.exists(root_path): print "source path not exist" return root_path = os.path.abspath(root_path) old_path = os.path.dirname(root_path) else : return exclude = template.get( 'exclude' ) include = template.get( 'include' ) store = config.get( "store" ) if not store or not os.path.exists(store.get( 'dir_path' , '')): return data = config.get( "data" ) if not data: return if not os.path.exists(root_path): print 'root path not exists' return if os.path.isfile(root_path): files = [root_path] else : base_name = os.path.basename(root_path) store_root_path = os.path.join(store.get( 'dir_path' ), base_name) if not os.path.exists(store_root_path): os.mkdir(store_root_path) files = get_files(root_path) for nfile in files: print nfile try : with codecs. open (nfile, "rb" , "UTF-8" ) as f: s = f.read() if not exclude_filter(exclude, nfile) or include_filter(include, nfile): s = s % data except : with codecs. open (nfile, "rb" ) as f: s = f.read() # save to file fn = nfile.replace(old_path, store.get( 'dir_path' )) fn_dir = os.path.dirname(fn) if not os.path.exists(fn_dir): os.makedirs(fn_dir) try : with codecs. open (fn, "wb" , "UTF-8" ) as f: f.write(s) f.flush() except : with codecs. open (fn, "wb" ) as f: f.write(s) f.flush() if __name__ = = '__main__' : main() |
配置文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
{ "template" : { "path" : "D:/tunicorn-web/framework-template" , ##模板文件主目录 "exclude" : { ##不进行模板格式化的文件 "file_path" : [], "file_name" : [ "config.json" , "make_project.py" ], "ext_name" : [ "css" , "woff2" ], "file_type" : [], "regex" : [] }, "include" : { ##进行模板格式化的文件 "file_path" : [], "file_name" : [] } }, "store" :{ "dir_path" : "e:/test" ##输出路径主目录 "data" : { "project_name" : "NewJAVA" , ##模板数据 "project_prefix" : "newjava" ##模板数据 } } |
执行操作:
1、安装了python环境
2、双击python脚本
3、然后在执行下README中的步骤
readme:
README
=============
脚本使用
-------------
1. 打开config.json文件
2. 配置相关信息[输出目录、项目名称、项目前缀]
3. 执行make_project.py脚本
4. 查看输出目录
以上这篇对python实现模板生成脚本的方法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/five3/article/details/70208152