欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python腳本替換指定行實(shí)現(xiàn)步驟

 更新時間:2017年07月11日 17:15:53   作者:ykdsg  
這篇文章主要介紹了 python腳本替換指定行實(shí)現(xiàn)步驟的相關(guān)資料,需要的朋友可以參考下

 python腳本替換指定行實(shí)現(xiàn)步驟

       本文主要介紹了Python的腳本替換,由于工作的需要,必須對日志系統(tǒng)進(jìn)行更新,這里在網(wǎng)上搜索到一篇文章比較不錯,這里記錄下,大家可以參考下,

工作中需要遷移代碼,并把原來的日志系統(tǒng)更新到現(xiàn)在的格式,原來獲取log的格式是

AuctionPoolLoggerUtil.getLogger() 

現(xiàn)在獲取log的格式是:

LoggerFactory.getLogger(XXXXX.class) 

這里的XXXXX需要替換為當(dāng)前的類名。如果這樣的java文件不多還好,可以一個個人肉替換。一旦這樣的文件很多,特別是遷移過來大量的文件時,你就會發(fā)現(xiàn)簡直是一場災(zāi)難。其實(shí)我們發(fā)現(xiàn)上面的工作很多是機(jī)械單調(diào)的。ide中的替換功能不能做到的是把XXXXX替換成當(dāng)前的類名。而python很容易處理文本,利用正則表達(dá)式可以比較方便的拿到類名,然后替換掉xxxxx就可以了。

實(shí)現(xiàn)代碼:

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 后面需要有, 否則會出現(xiàn)多余的空行 
          print line.replace('XXXXX',className), 
        else: 
          print line, 
 
 
def search(): 
  os.path.walk(packDir,processDirectory,None) 
 
if __name__ == '__main__': 
  search() 

上面的腳本中大部分是fileinput.input的注釋,就是說了inplace=1其實(shí)就是把源文件的內(nèi)容放到緩存區(qū),然后直接將內(nèi)容寫入源文件

findClassNameP 是查找class name的正則表達(dá)式,上面的邏輯就是對文件逐行分析,拿到class name。然后再分析當(dāng)前行是否有xxxxx,有的話就用class name 替換,沒有的話就原行輸出。

       以上使用對python腳本替換指定行的簡單實(shí)例,如果大家有疑問或者更好的方法可以留言討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

最新評論