python脚本替换指定行实现步骤


Posted in Python onJuly 11, 2017

 python脚本替换指定行实现步骤

       本文主要介绍了Python的脚本替换,由于工作的需要,必须对日志系统进行更新,这里在网上搜索到一篇文章比较不错,这里记录下,大家可以参考下,

工作中需要迁移代码,并把原来的日志系统更新到现在的格式,原来获取log的格式是

AuctionPoolLoggerUtil.getLogger()

现在获取log的格式是:

LoggerFactory.getLogger(XXXXX.class)

这里的XXXXX需要替换为当前的类名。如果这样的java文件不多还好,可以一个个人肉替换。一旦这样的文件很多,特别是迁移过来大量的文件时,你就会发现简直是一场灾难。其实我们发现上面的工作很多是机械单调的。ide中的替换功能不能做到的是把XXXXX替换成当前的类名。而python很容易处理文本,利用正则表达式可以比较方便的拿到类名,然后替换掉xxxxx就可以了。

实现代码:

import fileinput 
import os 
import re 
 
__author__ = 'ykdsg' 
 
packDir='/Users/ykdsg/svn_workspace/auctionplatform/misc_refactory/auctionplatform/ap-biz/src/main/java/com/yk/misccenter' 
#查找class name 
findClassNameP=re.compile(r"(?<=class\s)\w*") 
findXP=re.compile(r"XXXXX") 
 
 
def processDirectory(args,dirname,filenames): 
  # print 'Directory',dirname 
  for filename in filenames: 
 
    if os.path.splitext(filename)[1]=='.java': 
      # print 'file',filename 
      fullFileUrl=dirname+ "/"+filename 
      fileObj=open(fullFileUrl) 
      className='' 
      # Optional in-place filtering: if the keyword argument inplace=1 is passed to fileinput.input() or to 
      # the FileInput constructor, the file is moved to a backup file and standard output is directed to the 
      # input file (if a file of the same name as the backup file already exists, it will be replaced silently) 
      # . This makes it possible to write a filter that rewrites its input file in place. If the backup 
      # parameter is given (typically as backup='.<some extension>'), it specifies the extension for the 
      # backup file, and the backup file remains around; by default, the extension is '.bak' and it is deleted 
      # when the output file is closed. In-place filtering is disabled when standard input is read. 
      for line in fileinput.input(fullFileUrl, inplace=1): 
        matchClass = findClassNameP.search(line) 
        if matchClass: 
          className = matchClass.group() 
        matchX=findXP.search(line) 
        if matchX: 
          #print 后面需要有, 否则会出现多余的空行 
          print line.replace('XXXXX',className), 
        else: 
          print line, 
 
 
def search(): 
  os.path.walk(packDir,processDirectory,None) 
 
if __name__ == '__main__': 
  search()

上面的脚本中大部分是fileinput.input的注释,就是说了inplace=1其实就是把源文件的内容放到缓存区,然后直接将内容写入源文件

findClassNameP 是查找class name的正则表达式,上面的逻辑就是对文件逐行分析,拿到class name。然后再分析当前行是否有xxxxx,有的话就用class name 替换,没有的话就原行输出。

       以上使用对python脚本替换指定行的简单实例,如果大家有疑问或者更好的方法可以留言讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Python 相关文章推荐
python备份文件的脚本
Aug 11 Python
Python实现list反转实例汇总
Nov 11 Python
Python 多线程实例详解
Mar 25 Python
python中MethodType方法介绍与使用示例
Aug 03 Python
Python日期的加减等操作的示例
Aug 15 Python
python二维列表一维列表的互相转换实例
Jul 02 Python
Python 监测文件是否更新的方法
Jun 10 Python
使用Python做垃圾分类的原理及实例代码附源码
Jul 02 Python
docker django无法访问redis容器的解决方法
Aug 21 Python
Pytorch to(device)用法
Jan 08 Python
Python用tkinter实现自定义记事本的方法详解
Mar 31 Python
Python如何快速找到多个字典中的公共键(key)
Apr 29 Python
Python书单 不将就
Jul 11 #Python
Python编写一个闹钟功能
Jul 11 #Python
python自定义异常实例详解
Jul 11 #Python
详解python中的文件与目录操作
Jul 11 #Python
python 系统调用的实例详解
Jul 11 #Python
python中matplotlib实现最小二乘法拟合的过程详解
Jul 11 #Python
Python基于QRCode实现生成二维码的方法【下载,安装,调用等】
Jul 11 #Python
You might like
Apache, PHP在Windows 9x/NT下的安装与配置 (二)
2006/10/09 PHP
php计算几分钟前、几小时前、几天前的几个函数、类分享
2014/04/09 PHP
php编程每天必学之验证码
2016/03/03 PHP
一段好玩的JavaScript代码
2006/12/01 Javascript
js加解密 脚本解密
2008/02/22 Javascript
JavaScript性能陷阱小结(附实例说明)
2010/12/28 Javascript
jquery一句话全选/取消全选
2011/03/01 Javascript
jQuery 源码分析笔记(6) jQuery.data
2011/06/08 Javascript
详解JavaScript中的4种类型识别方法
2015/09/14 Javascript
浅析JavaScript回调函数应用
2016/05/22 Javascript
JS实现简易刻度时钟示例代码
2017/03/11 Javascript
angular2+node.js express打包部署的实战
2017/07/27 Javascript
mui back 返回刷新页面的实例
2017/12/06 Javascript
vue + any-touch实现一个iscroll 实现拖拽和滑动动画效果
2019/04/08 Javascript
js如何实现元素曝光上报
2019/08/07 Javascript
js实现课堂随机点名系统
2019/11/21 Javascript
Python Tkinter GUI编程入门介绍
2015/03/10 Python
Python封装原理与实现方法详解
2018/08/28 Python
Python3之不使用第三方变量,实现交换两个变量的值
2019/06/26 Python
Python Numpy库datetime类型的处理详解
2019/07/13 Python
python 利用pywifi模块实现连接网络破解wifi密码实时监控网络
2019/09/16 Python
python数据预处理 :数据共线性处理详解
2020/02/24 Python
Python如何读写二进制数组数据
2020/08/01 Python
python实现KNN近邻算法
2020/12/30 Python
RentCars.com巴西:汽车租赁网站
2016/08/22 全球购物
美国马匹用品和骑马配件购物网站:Horse.com
2018/01/08 全球购物
爱尔兰电脑、家电和家具购物网站:Buy It Direct
2019/07/09 全球购物
师德先进个人事迹材料
2014/12/19 职场文书
岳庙导游词
2015/02/04 职场文书
海底两万里读书笔记
2015/06/26 职场文书
python Tkinter的简单入门教程
2021/04/11 Python
详解CSS故障艺术
2021/05/25 HTML / CSS
Python一行代码实现自动发邮件功能
2021/05/30 Python
Python中else的三种使用场景
2021/06/16 Python
python模板入门教程之flask Jinja
2022/04/11 Python
JS中forEach()、map()、every()、some()和filter()的用法
2022/05/11 Javascript