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两种遍历字典(dict)的方法比较
May 29 Python
Python实现包含min函数的栈
Apr 29 Python
在java中如何定义一个抽象属性示例详解
Aug 18 Python
详解Python开发中如何使用Hook技巧
Nov 01 Python
Python安装Numpy和matplotlib的方法(推荐)
Nov 02 Python
TensorFlow实现Logistic回归
Sep 07 Python
pytorch 获取层权重,对特定层注入hook, 提取中间层输出的方法
Aug 17 Python
利用python实现.dcm格式图像转为.jpg格式
Jan 13 Python
基于Python的自媒体小助手---登录页面的实现代码
Jun 29 Python
Python脚本实现Zabbix多行日志监控过程解析
Aug 26 Python
Python做图像处理及视频音频文件分离和合成功能
Nov 24 Python
Python 高级库15 个让新手爱不释手(推荐)
May 15 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
linux下删除7天前日志的代码(php+shell)
2011/01/02 PHP
ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
2014/06/25 PHP
浅谈使用 PHP 进行手机 APP 开发(API 接口开发)
2014/08/11 PHP
使用PHP编写发红包程序
2015/07/22 PHP
javascript正则表达式中参数g(全局)的作用
2010/11/11 Javascript
在javascript中对于DOM的加强
2013/04/11 Javascript
jquery禁用右键单击功能屏蔽F5刷新
2014/03/17 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
2015/04/16 Javascript
jQuery的Cookie封装,与PHP交互的简单实现
2016/10/05 Javascript
javascript实现table单元格点击展开隐藏效果(实例代码)
2017/04/10 Javascript
Vue按需加载的具体实现
2017/12/02 Javascript
原生js实现省市区三级联动代码分享
2018/02/12 Javascript
JS实现可视化文件上传
2018/09/08 Javascript
Vue页面跳转动画效果的实现方法
2018/09/23 Javascript
微信小程序非swiper组件实现的自定义伪3D轮播图效果示例
2018/12/11 Javascript
ES6知识点整理之函数数组参数的默认值及其解构应用示例
2019/04/17 Javascript
vue element中axios下载文件(后端Python)
2019/05/10 Javascript
Vuex模块化应用实践示例
2020/02/03 Javascript
JS实现简易贪吃蛇游戏
2020/08/24 Javascript
nuxt 页面路由配置,主页轮播组件开发操作
2020/11/05 Javascript
[01:04:14]OG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
使用python实现扫描端口示例
2014/03/29 Python
Python实现各种排序算法的代码示例总结
2015/12/11 Python
Python编程中time模块的一些关键用法解析
2016/01/19 Python
详解Python3操作Mongodb简明易懂教程
2017/05/25 Python
python实现翻转棋游戏(othello)
2019/07/29 Python
Python requests设置代理的方法步骤
2020/02/23 Python
美国男士和女士奢侈品折扣手表购物网站:Certified Watch Store
2018/06/13 全球购物
shallow copy和deep copy的区别
2016/05/09 面试题
Why we need EJB
2016/10/20 面试题
人力资源管理专业应届生求职信
2013/09/28 职场文书
大四本科生的自我评价
2013/12/30 职场文书
物流专业自荐信
2014/05/23 职场文书
大学生求职简历自我评价
2015/03/02 职场文书
解决Springboot PostMapping无法获取数据的问题
2022/05/06 Java/Android
Win10玩csgo闪退如何解决?Win10玩csgo闪退的解决方法
2022/07/23 数码科技