对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实现在目录中查找指定文件的方法
Nov 11 Python
python实现模拟按键,自动翻页看u17漫画
Mar 17 Python
Python多线程编程简单介绍
Apr 13 Python
Python中一行和多行import模块问题
Apr 01 Python
python利用pandas将excel文件转换为txt文件的方法
Oct 23 Python
python Web flask 视图内容和模板实现代码
Aug 23 Python
PyTorch中topk函数的用法详解
Jan 02 Python
解决Pycharm的项目目录突然消失的问题
Jan 20 Python
python对批量WAV音频进行等长分割的方法实现
Sep 25 Python
python实现无边框进度条的实例代码
Dec 30 Python
python利用xpath爬取网上数据并存储到django模型中
Feb 26 Python
基于Python实现流星雨效果的绘制
Mar 18 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利用header函数实现文件下载时直接提示保存
2009/11/12 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
音乐播放用的的几个函数
2006/09/07 Javascript
js 分栏效果实现代码
2009/08/29 Javascript
jquery命令汇总,方便使用jquery的朋友
2012/06/26 Javascript
根据当前时间在jsp页面上显示上午或下午
2014/08/18 Javascript
浅谈JavaScript函数节流
2014/12/09 Javascript
完美兼容IE,chrome,ff的设为首页、加入收藏及保存到桌面js代码
2014/12/17 Javascript
JavaScript中的类(Class)详细介绍
2014/12/30 Javascript
JavaScript插件化开发教程(五)
2015/02/01 Javascript
js实现简易的单数字随机抽奖(0-9)
2020/03/19 Javascript
非常实用的12个jquery代码片段
2015/11/02 Javascript
浅谈js数据类型判断与数组判断
2016/08/29 Javascript
JS中的作用域链
2017/03/01 Javascript
Vue中的混入的使用(vue mixins)
2018/06/01 Javascript
浅谈Webpack4 Tree Shaking 终极优化指南
2019/11/18 Javascript
原生JS封装拖动验证滑块的实现代码示例
2020/06/01 Javascript
vue3.0生命周期的示例代码
2020/09/24 Javascript
antd design table更改某行数据的样式操作
2020/10/31 Javascript
Python遍历文件夹和读写文件的实现代码
2016/08/28 Python
Python聊天室程序(基础版)
2018/04/01 Python
Python循环中else,break和continue的用法实例详解
2019/07/11 Python
flask框架jinja2模板与模板继承实例分析
2019/08/01 Python
python实现统计代码行数的小工具
2019/09/19 Python
纯css3制作的火影忍者写轮眼开眼至轮回眼及进化过程实例
2014/11/11 HTML / CSS
CSS3 :not()选择器实现最后一行li去除某种css样式
2016/10/19 HTML / CSS
信息管理专业学生自荐信格式
2013/09/22 职场文书
环保公益广告语
2014/03/13 职场文书
调解协议书
2014/04/16 职场文书
会计电算化实训报告
2014/11/04 职场文书
农业项目投资意向书
2015/05/09 职场文书
张丽莉观后感
2015/06/16 职场文书
小学数学教师研修感悟
2015/11/18 职场文书
九不准学习心得体会
2016/01/23 职场文书
详解MySQL InnoDB存储引擎的内存管理
2021/04/08 MySQL
如何Tomcat中使用ipv6地址
2022/05/06 Servers