对python实现模板生成脚本的方法详解


Posted in Python onJanuary 30, 2019

最近项目需要,针对主项目提取一个小的基础版本,供于在新建项目时使用,所以就有这个python模板生成脚本,其作用如下:

1、通过配置文件来控制模板中的数据、格式化的过滤条件

2、执行后会把目录下所有的文件都会执行一篇

#!/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()

配置文件:

{
 "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实现模板生成脚本的方法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中用max()方法求最大值的介绍
May 15 Python
python中字典(Dictionary)用法实例详解
May 30 Python
Python正规则表达式学习指南
Aug 02 Python
Python加密方法小结【md5,base64,sha1】
Jul 13 Python
Python实现输出程序执行进度百分比的方法
Sep 16 Python
python web基础之加载静态文件实例
Mar 20 Python
Python求两个圆的交点坐标或三个圆的交点坐标方法
Nov 07 Python
解决Python下json.loads()中文字符出错的问题
Dec 19 Python
python 缺失值处理的方法(Imputation)
Jul 02 Python
python pprint模块中print()和pprint()两者的区别
Feb 10 Python
Python如何获取文件指定行的内容
May 27 Python
解析Python 偏函数用法全方位实现
Jun 26 Python
ActiveMQ:使用Python访问ActiveMQ的方法
Jan 30 #Python
python 发送和接收ActiveMQ消息的实例
Jan 30 #Python
Python批量生成特定尺寸图片及图画任意文字的实例
Jan 30 #Python
理想高通滤波实现Python opencv示例
Jan 30 #Python
对DataFrame数据中的重复行,利用groupby累加合并的方法详解
Jan 30 #Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
Jan 30 #Python
对dataframe数据之间求补集的实例详解
Jan 30 #Python
You might like
提升PHP执行速度全攻略(下)
2006/10/09 PHP
PHP调用三种数据库的方法(1)
2006/10/09 PHP
Linux下ZendOptimizer的安装与配置方法
2007/04/12 PHP
解析PHP中的内存管理,PHP动态分配和释放内存
2013/06/28 PHP
浅析php工厂模式
2014/11/25 PHP
支持中文、字母、数字的PHP验证码
2015/05/04 PHP
PHP序列化操作方法分析
2016/09/28 PHP
javascript自适应宽度的瀑布流实现思路
2013/02/20 Javascript
使用jQuery UI的tooltip函数修饰title属性的气泡悬浮框
2013/06/24 Javascript
ExtJs动态生成treepanel的Json格式
2015/07/19 Javascript
JavaScript实现可拖拽的拖动层Div实例
2015/08/05 Javascript
谈谈我对JavaScript中typeof和instanceof的深入理解
2015/12/25 Javascript
JS字符串按逗号和回车分隔的方法
2017/04/25 Javascript
Angularjs2不同组件间的通信实例代码
2017/05/06 Javascript
详解vue.js的事件处理器v-on:click
2017/06/27 Javascript
vue.js删除列表中的一行
2018/06/30 Javascript
解决eclipse中没有js代码提示的问题
2018/10/10 Javascript
vue中watch和computed为什么能监听到数据的改变以及不同之处
2019/12/27 Javascript
Vue组件为什么data必须是一个函数
2020/06/11 Javascript
如何利用Node.js与JSON搭建简单的动态服务器
2020/06/16 Javascript
小程序点餐界面添加购物车左右摆动动画
2020/09/23 Javascript
Python中实现参数类型检查的简单方法
2015/04/21 Python
基于python爬虫数据处理(详解)
2017/06/10 Python
Python数据类型中的“冒号“[::]——分片与步长操作示例
2018/01/24 Python
python操作excel文件并输出txt文件的实例
2018/07/10 Python
python 使用sys.stdin和fileinput读入标准输入的方法
2018/10/17 Python
Python利用matplotlib绘制约数个数统计图示例
2019/11/26 Python
python opencv实现直线检测并测出倾斜角度(附源码+注释)
2020/12/31 Python
Myprotein台湾官方网站:全球领先的运动营养品牌
2018/12/10 全球购物
高校生生产实习自我鉴定
2013/09/21 职场文书
职业生涯规划书结束语
2014/04/15 职场文书
岗位明星事迹材料
2014/05/18 职场文书
2015年财政局工作总结
2015/05/21 职场文书
实现一个简单得数据响应系统
2021/11/11 Javascript
Nginx虚拟主机的搭建的实现步骤
2022/01/18 Servers
Nginx使用ngx_http_upstream_module实现负载均衡功能示例
2022/08/05 Servers