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用于url解码和中文解析的小脚本(python url decoder)
Aug 11 Python
windows及linux环境下永久修改pip镜像源的方法
Nov 28 Python
python添加模块搜索路径方法
Sep 11 Python
Python实现的读取电脑硬件信息功能示例
May 30 Python
python获取指定字符串中重复模式最高的字符串方法
Jun 29 Python
Python读取YUV文件,并显示的方法
Dec 04 Python
Python控制Firefox方法总结
Jun 03 Python
django3.02模板中的超链接配置实例代码
Feb 04 Python
python随机模块random的22种函数(小结)
May 15 Python
Python单元测试及unittest框架用法实例解析
Jul 09 Python
详解python的变量缓存机制
Jan 24 Python
对Keras自带Loss Function的深入研究
May 25 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求小于1000的所有水仙花数的代码
2012/01/10 PHP
php快递单号查询接口使用示例
2014/05/05 PHP
PHP aes (ecb)解密后乱码问题
2015/06/22 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
2016/04/30 PHP
Laravel实现自定义错误输出内容的方法
2016/10/10 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
2017/09/16 PHP
JS 非图片动态loading效果实现代码
2010/04/09 Javascript
js中有关IE版本检测
2012/01/04 Javascript
表格单元格交错着色实现思路及代码
2013/04/01 Javascript
JS冒泡事件的快速解决方法
2013/12/16 Javascript
在JavaScript中操作数组之map()方法的使用
2015/06/09 Javascript
js跨浏览器的事件侦听器和事件对象的使用方法
2015/12/17 Javascript
js实现年月日表单三级联动
2020/04/17 Javascript
JavaScript高阶函数_动力节点Java学院整理
2017/06/28 Javascript
vue 中滚动条始终定位在底部的方法
2018/09/03 Javascript
详解react内联样式使用webpack将px转rem
2018/09/13 Javascript
微信小程序实现获取用户信息并存入数据库操作示例
2019/05/07 Javascript
深入了解Hybrid App技术的相关知识
2019/07/17 Javascript
微信小程序后端无法保持session的原因及解决办法问题
2020/03/20 Javascript
[03:26]回顾2015国际邀请赛中国区预选赛
2015/06/09 DOTA
[56:29]Secret vs Optic 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[01:10]DOTA2英雄背景故事第四期之混沌法则混沌骑士
2020/07/16 DOTA
以911新闻为例演示Python实现数据可视化的教程
2015/04/23 Python
python版本的读写锁操作方法
2016/04/25 Python
python 实现红包随机生成算法的简单实例
2017/01/04 Python
使用python将请求的requests headers参数格式化方法
2019/01/02 Python
详解python中init方法和随机数方法
2019/03/13 Python
python之信息加密题目详解
2019/06/26 Python
Tornado实现多进程/多线程的HTTP服务详解
2019/07/25 Python
Python 实现进度条的六种方式
2021/01/06 Python
HTML5中判断用户是否正在浏览页面的方法
2014/05/03 HTML / CSS
新东方旗下远程教育网站:新东方在线
2020/03/19 全球购物
C#面试常见问题
2013/02/25 面试题
大学老师推荐信
2014/02/25 职场文书
毕业典礼主持词
2015/06/29 职场文书
入党心得体会
2019/06/20 职场文书