python腳本替換指定行實(shí)現(xiàn)步驟
python腳本替換指定行實(shí)現(xiàn)步驟
本文主要介紹了Python的腳本替換,由于工作的需要,必須對(duì)日志系統(tǒng)進(jìn)行更新,這里在網(wǎng)上搜索到一篇文章比較不錯(cuò),這里記錄下,大家可以參考下,
工作中需要遷移代碼,并把原來(lái)的日志系統(tǒng)更新到現(xiàn)在的格式,原來(lái)獲取log的格式是
AuctionPoolLoggerUtil.getLogger()
現(xiàn)在獲取log的格式是:
LoggerFactory.getLogger(XXXXX.class)
這里的XXXXX需要替換為當(dāng)前的類(lèi)名。如果這樣的java文件不多還好,可以一個(gè)個(gè)人肉替換。一旦這樣的文件很多,特別是遷移過(guò)來(lái)大量的文件時(shí),你就會(huì)發(fā)現(xiàn)簡(jiǎn)直是一場(chǎng)災(zāi)難。其實(shí)我們發(fā)現(xiàn)上面的工作很多是機(jī)械單調(diào)的。ide中的替換功能不能做到的是把XXXXX替換成當(dāng)前的類(lèi)名。而python很容易處理文本,利用正則表達(dá)式可以比較方便的拿到類(lèi)名,然后替換掉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 后面需要有, 否則會(huì)出現(xiàn)多余的空行
print line.replace('XXXXX',className),
else:
print line,
def search():
os.path.walk(packDir,processDirectory,None)
if __name__ == '__main__':
search()
上面的腳本中大部分是fileinput.input的注釋?zhuān)褪钦f(shuō)了inplace=1其實(shí)就是把源文件的內(nèi)容放到緩存區(qū),然后直接將內(nèi)容寫(xiě)入源文件
findClassNameP 是查找class name的正則表達(dá)式,上面的邏輯就是對(duì)文件逐行分析,拿到class name。然后再分析當(dāng)前行是否有xxxxx,有的話就用class name 替換,沒(méi)有的話就原行輸出。
以上使用對(duì)python腳本替換指定行的簡(jiǎn)單實(shí)例,如果大家有疑問(wèn)或者更好的方法可以留言討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
python3 使用openpyxl將mysql數(shù)據(jù)寫(xiě)入xlsx的操作
這篇文章主要介紹了python3 使用openpyxl將mysql數(shù)據(jù)寫(xiě)入xlsx的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05
Python無(wú)頭爬蟲(chóng)下載文件的實(shí)現(xiàn)
這篇文章主要介紹了Python無(wú)頭爬蟲(chóng)下載文件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
Python通過(guò)websocket與js客戶端通信示例分析
網(wǎng)站大多使用 HTTP 協(xié)議通信,而 HTTP 是無(wú)連接的協(xié)議。只有客戶端請(qǐng)求時(shí),服務(wù)器端才能發(fā)出相應(yīng)的應(yīng)答, HTTP 請(qǐng)求的包也比較大,如果只是很小的數(shù)據(jù)通信,開(kāi)銷(xiāo)過(guò)大。于是,我們可以使用 websocket 這個(gè)協(xié)議,用最小的開(kāi)銷(xiāo)實(shí)現(xiàn)面向連接的通信。2014-06-06
Python繪制動(dòng)態(tài)水球圖過(guò)程詳解
這篇文章主要介紹了Python繪制動(dòng)態(tài)水球圖過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
通過(guò)Python編程將CSV文件導(dǎo)出為PDF文件的方法
CSV文件通常用于存儲(chǔ)大量的數(shù)據(jù),而PDF文件則是一種通用的文檔格式,便于與他人共享和打印,將CSV文件轉(zhuǎn)換成PDF文件可以幫助我們更好地管理和展示數(shù)據(jù),本文將介紹如何通過(guò)Python編程將CSV文件導(dǎo)出為PDF文件,需要的朋友可以參考下2024-06-06

