python脚本替换指定行实现步骤
python脚本替换指定行实现步骤
本文主要介绍了Python的脚本替换,由于工作的需要,必须对日志系统进行更新,这里在网上搜索到一篇文章比较不错,这里记录下,大家可以参考下,
工作中需要迁移代码,并把原来的日志系统更新到现在的格式,原来获取log的格式是
AuctionPoolLoggerUtil.getLogger()
现在获取log的格式是:
LoggerFactory.getLogger(XXXXX.class)
这里的XXXXX需要替换为当前的类名。如果这样的java文件不多还好,可以一个个人肉替换。一旦这样的文件很多,特别是迁移过来大量的文件时,你就会发现简直是一场灾难。其实我们发现上面的工作很多是机械单调的。ide中的替换功能不能做到的是把XXXXX替换成当前的类名。而python很容易处理文本,利用正则表达式可以比较方便的拿到类名,然后替换掉xxxxx就可以了。
实现代码:
importfileinput importos importre __author__='ykdsg' packDir='/Users/ykdsg/svn_workspace/auctionplatform/misc_refactory/auctionplatform/ap-biz/src/main/java/com/yk/misccenter' #查找classname findClassNameP=re.compile(r"(?<=class\s)\w*") findXP=re.compile(r"XXXXX") defprocessDirectory(args,dirname,filenames): #print'Directory',dirname forfilenameinfilenames: ifos.path.splitext(filename)[1]=='.java': #print'file',filename fullFileUrl=dirname+"/"+filename fileObj=open(fullFileUrl) className='' #Optionalin-placefiltering:ifthekeywordargumentinplace=1ispassedtofileinput.input()orto #theFileInputconstructor,thefileismovedtoabackupfileandstandardoutputisdirectedtothe #inputfile(ifafileofthesamenameasthebackupfilealreadyexists,itwillbereplacedsilently) #.Thismakesitpossibletowriteafilterthatrewritesitsinputfileinplace.Ifthebackup #parameterisgiven(typicallyasbackup='.'),itspecifiestheextensionforthe #backupfile,andthebackupfileremainsaround;bydefault,theextensionis'.bak'anditisdeleted #whentheoutputfileisclosed.In-placefilteringisdisabledwhenstandardinputisread. forlineinfileinput.input(fullFileUrl,inplace=1): matchClass=findClassNameP.search(line) ifmatchClass: className=matchClass.group() matchX=findXP.search(line) ifmatchX: #print后面需要有,否则会出现多余的空行 printline.replace('XXXXX',className), else: printline, defsearch(): os.path.walk(packDir,processDirectory,None) if__name__=='__main__': search()
上面的脚本中大部分是fileinput.input的注释,就是说了inplace=1其实就是把源文件的内容放到缓存区,然后直接将内容写入源文件
findClassNameP是查找classname的正则表达式,上面的逻辑就是对文件逐行分析,拿到classname。然后再分析当前行是否有xxxxx,有的话就用classname替换,没有的话就原行输出。
以上使用对python脚本替换指定行的简单实例,如果大家有疑问或者更好的方法可以留言讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!