对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开发的小球完全弹性碰撞游戏代码
Oct 15 Python
Python标准库之循环器(itertools)介绍
Nov 25 Python
Python实现从脚本里运行scrapy的方法
Apr 07 Python
Python检测一个对象是否为字符串类的方法
May 21 Python
python学习笔记之调用eval函数出现invalid syntax错误问题
Oct 18 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
Feb 23 Python
Django基于ORM操作数据库的方法详解
Mar 27 Python
python 调用钉钉机器人的方法
Feb 20 Python
Python Django 页面上展示固定的页码数实现代码
Aug 21 Python
python自动化UI工具发送QQ消息的实例
Aug 27 Python
Python异常模块traceback用法实例分析
Oct 22 Python
Python 开发工具PyCharm安装教程图文详解(新手必看)
Feb 28 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多用户计数器代码
2007/03/11 PHP
PHP 第二节 数据类型之数值型
2012/04/28 PHP
PHP批量生成静态HTML的简单原理和方法
2014/04/20 PHP
PHP查询快递信息的方法
2015/03/07 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
2016/04/15 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
用ASP将SQL搜索出来的内容导出为TXT的代码
2007/07/27 Javascript
基于jQuery的js分页代码
2010/06/10 Javascript
深入理解JavaScript系列(12) 变量对象(Variable Object)
2012/01/16 Javascript
在jQuery ajax中按钮button和submit的区别分析
2012/10/07 Javascript
Jquery获得控件值的三种方法总结
2014/02/13 Javascript
Css3制作变形与动画效果
2015/07/24 Javascript
javascript每日必学之条件分支
2016/02/17 Javascript
学习javascript文件加载优化
2016/02/19 Javascript
node.js学习之交互式解释器REPL详解
2016/12/08 Javascript
走进javascript——不起眼的基础,值和分号
2017/02/24 Javascript
原生JS实现图片网格式渐显、渐隐效果
2017/06/05 Javascript
Angular动画实现的2种方式以及添加购物车动画实例代码
2018/08/09 Javascript
JavaScript中七种流行的开源机器学习框架
2018/10/11 Javascript
Vue源码分析之Vue实例初始化详解
2019/08/25 Javascript
layui文件上传控件带更改后数据传值的方法
2019/09/23 Javascript
vue-父子组件和ref实例详解
2019/11/10 Javascript
ES6常用小技巧总结【去重、交换、合并、反转、迭代、计算等】
2019/12/21 Javascript
element-ui中按需引入的实现
2019/12/25 Javascript
vue中如何添加百度统计代码
2020/12/19 Vue.js
python远程登录代码
2008/04/29 Python
Python反转序列的方法实例分析
2018/03/21 Python
python中提高pip install速度
2020/02/14 Python
基于matplotlib中ion()和ioff()的使用详解
2020/06/16 Python
你所知道的集合类都有哪些?主要方法?
2012/12/31 面试题
人民教师求职自荐信
2014/03/12 职场文书
行政监察建议书
2014/05/19 职场文书
学生会工作感言
2015/08/07 职场文书
党员反邪教心得体会
2016/01/15 职场文书
详解flex:1什么意思
2022/07/23 HTML / CSS
输入框跟随文字内容适配宽实现示例
2022/08/14 Javascript