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制作检测Linux运行信息的工具的教程
Apr 01 Python
微信跳一跳辅助python代码实现
Jan 05 Python
Python内置模块hashlib、hmac与uuid用法分析
Feb 12 Python
python邮件发送smtplib使用详解
Jun 16 Python
python 按不同维度求和,最值,均值的实例
Jun 28 Python
python字典改变value值方法总结
Jun 21 Python
Python基于OpenCV实现人脸检测并保存
Jul 23 Python
Python绘制股票移动均线的实例
Aug 24 Python
python Event事件、进程池与线程池、协程解析
Oct 25 Python
pycharm软件实现设置自动保存操作
Jun 08 Python
sklearn的predict_proba使用说明
Jun 28 Python
OpenCV-Python实现轮廓的特征值
Jun 09 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闭包(Closure)使用详解
2013/05/02 PHP
WAF的正确bypass
2017/01/05 PHP
PHP基于DOM创建xml文档的方法示例
2017/02/08 PHP
PHPMailer ThinkPHP实现自动发送邮件功能
2018/06/10 PHP
thinkphp5实现无限级分类
2019/02/18 PHP
基于jquery的滑动样例代码
2010/11/20 Javascript
终于解决了IE8不支持数组的indexOf方法
2013/04/03 Javascript
按下回车键指向下一个位置的一个函数代码
2014/03/10 Javascript
jQuery仿gmail实现fixed布局的方法
2015/05/27 Javascript
判断是否存在子节点的实现代码
2016/05/18 Javascript
JavaScript 实现的checkbox经典实例分享
2016/10/16 Javascript
js 实现一些跨浏览器的事件方法详解及实例
2016/10/27 Javascript
jQuery窗口拖动功能的实现代码
2017/02/04 Javascript
微信小程序左滑删除效果的实现代码
2017/02/20 Javascript
vue2.x 父组件监听子组件事件并传回信息的方法
2017/07/17 Javascript
微信小程序 rich-text的使用方法
2017/08/04 Javascript
jQuery实现页码跳转式动态数据分页
2017/12/31 jQuery
vue项目中跳转到外部链接的实例讲解
2018/09/20 Javascript
nodemon实现Typescript项目热更新的示例代码
2019/11/19 Javascript
javascript实现倒计时关闭广告
2021/02/09 Javascript
Python入门篇之列表和元组
2014/10/17 Python
深入理解 Python 中的多线程 新手必看
2016/11/20 Python
Python 处理数据的实例详解
2017/08/10 Python
Python序列循环移位的3种方法推荐
2018/04/09 Python
python3 线性回归验证方法
2019/07/09 Python
PowerBI和Python关于数据分析的对比
2019/07/11 Python
Python中sys模块功能与用法实例详解
2020/02/26 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
2020/04/24 Python
美国女性奢华品牌精品店:INTERMIX
2017/10/12 全球购物
Hotels.com越南:酒店预订
2019/10/29 全球购物
办公室主任职责范文
2013/11/08 职场文书
詹天佑教学反思
2014/04/30 职场文书
应届生求职信范文
2014/06/30 职场文书
《少年闰土》教学反思
2016/02/18 职场文书
Apache Pulsar结合Hudi构建Lakehouse方案分析
2022/03/31 Servers
在Windows Server 2012上安装 .NET Framework 3.5 所遇到的问题
2022/04/29 Servers