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通过定义一个类实例作为ftp回调方法
May 04 Python
Python中的getopt函数使用详解
Jul 28 Python
Python线程指南详细介绍
Jan 05 Python
python3 遍历删除特定后缀名文件的方法
Apr 23 Python
Tensorflow 查看变量的值方法
Jun 14 Python
对Python协程之异步同步的区别详解
Feb 19 Python
Python处理时间日期坐标轴过程详解
Jun 25 Python
python批量图片处理简单示例
Aug 06 Python
Pytorch使用MNIST数据集实现基础GAN和DCGAN详解
Jan 10 Python
TensorFlow 多元函数的极值实例
Feb 10 Python
Python中的Cookie模块如何使用
Jun 04 Python
Python+tkinter实现高清图片保存
Mar 13 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
php中支持多种编码的中文字符串截取函数!
2007/03/20 PHP
php自动获取字符串编码函数mb_detect_encoding
2011/05/31 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
Yii2.0框架behaviors方法使用实例分析
2019/09/30 PHP
jquery实现固定顶部导航效果(仿蘑菇街)
2013/03/21 Javascript
JS HTML5 音乐天气播放器(Ajax获取天气信息)
2013/05/26 Javascript
jquery中get,post和ajax方法的使用小结
2014/02/04 Javascript
JavaScript中连接操作Oracle数据库实例
2015/04/02 Javascript
javascript实现列表切换效果
2016/05/02 Javascript
jqPlot jQuery绘图插件的使用
2016/06/18 Javascript
Js遍历键值对形式对象或Map形式的方法
2016/08/08 Javascript
谈谈JavaScript数组常用方法总结
2017/01/24 Javascript
微信小程序 侧滑删除(左滑删除)
2017/05/23 Javascript
Bootstrap输入框组件使用详解
2017/06/09 Javascript
详解Angular5路由传值方式及其相关问题
2018/04/28 Javascript
JS实现图片旋转动画效果封装与使用示例
2018/07/09 Javascript
原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
2020/12/30 Javascript
Node.JS获取GET,POST数据之queryString模块使用方法详解
2020/02/06 Javascript
[03:39]2015国际邀请赛主赛事首日精彩回顾
2015/08/05 DOTA
[43:58]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第一场 1月8日
2021/03/11 DOTA
使用Python实现一个简单的项目监控
2015/03/31 Python
详解duck typing鸭子类型程序设计与Python的实现示例
2016/06/03 Python
Python学习pygal绘制线图代码分享
2017/12/09 Python
python 重命名轴索引的方法
2018/11/10 Python
一篇文章教你用python画动态爱心表白
2020/11/22 Python
澳大利亚百货公司:David Jones
2018/02/08 全球购物
全球最大的户外用品零售商之一:The House
2018/06/12 全球购物
墨尔本复古时尚品牌:Dangerfield
2018/12/12 全球购物
J2SDK1.5与J2SDK5.0有什么区别
2012/09/19 面试题
畜牧兽医本科生的自我评价
2014/03/03 职场文书
诉讼财产保全担保书
2014/05/20 职场文书
离婚协议书该怎么写
2014/10/04 职场文书
开会通知短信大全
2015/04/20 职场文书
2015年社区矫正工作总结
2015/04/21 职场文书
强烈推荐:小学生:暑假作息时间表(值得收藏)
2019/07/09 职场文书
mongodb的安装和开机自启动详细讲解
2021/08/02 MongoDB