对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实现正则检测密码合法性
Jan 05 Python
Python弹出输入框并获取输入值的实例
Jun 18 Python
python打开windows应用程序的实例
Jun 28 Python
在python 中split()使用多符号分割的例子
Jul 15 Python
Pycharm最新激活码2019(推荐)
Dec 31 Python
django模板获取list中指定索引的值方式
May 14 Python
python随机模块random的22种函数(小结)
May 15 Python
Pytorch转onnx、torchscript方式
May 25 Python
Python grequests模块使用场景及代码实例
Aug 10 Python
利用Pycharm + Django搭建一个简单Python Web项目的步骤
Oct 22 Python
selenium学习教程之定位以及切换frame(iframe)
Jan 04 Python
Python中json.load()和json.loads()有哪些区别
Jun 07 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.MVC的模板标签系统(一)
2006/09/05 PHP
php5.3 废弃函数小结
2010/05/16 PHP
PHP使用strtotime计算两个给定日期之间天数的方法
2015/03/18 PHP
深入理解 PHP7 中全新的 zval 容器和引用计数机制
2018/10/15 PHP
javascript 操作cookies及正确使用cookies的属性
2009/10/15 Javascript
Javascript 读书笔记索引贴
2010/01/11 Javascript
50个比较实用jQuery代码段
2011/09/18 Javascript
jquery 事件冒泡的介绍以及如何阻止事件冒泡
2012/12/25 Javascript
CSS(js)限制页面显示的文本字符长度
2012/12/27 Javascript
javascript垃圾收集机制与内存泄漏详细解析
2013/11/11 Javascript
JS保存和删除cookie操作 判断cookie是否存在
2013/11/13 Javascript
Iframe实现跨浏览器自适应高度解决方法
2014/09/02 Javascript
深入理解JavaScript内置函数
2016/06/03 Javascript
基于JavaScript Array数组方法(新手必看篇)
2016/08/20 Javascript
javascript宿主对象之window.navigator详解
2016/09/07 Javascript
jQuery查找dom的几种方法效率详解
2017/05/17 jQuery
js实现1,2,3,5数字按照概率生成
2017/09/12 Javascript
Vue的elementUI实现自定义主题方法
2018/02/23 Javascript
微信小程序云开发(数据库)详解
2019/05/17 Javascript
Node.js API详解之 util模块用法实例分析
2020/05/09 Javascript
JS自定义右键菜单实现代码解析
2020/07/16 Javascript
pyqt4教程之实现半透明的天气预报界面示例
2014/03/02 Python
教你如何在Django 1.6中正确使用 Signal
2014/06/22 Python
仅用500行Python代码实现一个英文解析器的教程
2015/04/02 Python
python获取指定时间差的时间实例详解
2017/04/11 Python
在Python中pandas.DataFrame重置索引名称的实例
2018/11/06 Python
python 批量添加的button 使用同一点击事件的方法
2019/07/17 Python
Django调用支付宝接口代码实例详解
2020/04/04 Python
python中JWT用户认证的实现
2020/05/18 Python
python软件都是免费的吗
2020/06/18 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
2020/07/01 Python
纯CSS实现菜单、导航栏的3D翻转动画效果
2014/04/23 HTML / CSS
html5的画布canvas——画出弧线、旋转的图形实例代码+效果图
2013/06/09 HTML / CSS
如何用JQuery进行表单验证
2013/05/29 面试题
金陵十三钗观后感
2015/06/04 职场文书
python小型的音频操作库mp3Play
2022/04/24 Python