# -*- coding: UTF-8 -*-
# author: xiaym
# date: 2019-08-29
# 功能: 在XMl中找出oracle的存储过程,存储过程中没有添加commit;的地方,增加上去。
# 说明:1. 程序对于 case .. end;这种语句有可能正好也替换了,需要自己检查
# 2. 先找到declare, 再查找commit,如果找到commit,则查找下一个declare,如果没有找到commit,则增加end;
# 3. 程序可以重复执行,符合要求的文件不会改动,便于修改后文件对比
import os
DIRPATH="D:\\JRES_TA5"
DECLARESTR='declare'
COMMITSTR='commit;'
ENDSTR='end;'
SUFFIX='.xml'
#获取扩展名
def GetFileExtension(path):
return os.path.splitext(path)[1]
def GetAllFileWithSuffix(path,suffix):
allfile = []
for dirpath, dirnames, filenames in os.walk(path):
for name in filenames:
if GetFileExtension(name).lower() == suffix:
allfile.append(os.path.join(dirpath, name))
return allfile
def UpdateFile(filename):
firstflag=0
commitflag=0
endflag = 0
filechangeflag=0
printflag =0
f1=open(filename, 'r',encoding='utf-8')
f2=open(filename +".bak", 'w',encoding='utf-8')
for line in f1:
linetmp= line.replace("\n","").replace("\t","").replace(" ","")
if firstflag ==0:
# if re.search(DECLARESTR,linetmp,flags=re.I) : #找到declare
if linetmp.lower()==DECLARESTR.lower() : #找到declare
firstflag = 1
elif firstflag == 1:
if commitflag == 0:
# if re.search(COMMITSTR, linetmp,flags=re.I): #找到commit
if linetmp.lower()== COMMITSTR.lower():
commitflag=1
if linetmp.lower()== ENDSTR.lower(): # 没有找到commit,且找到了end;
f2.write(' commit;')
f2.write('\n')
f2.write(line)
endflag = 1
filechangeflag=1
if printflag == 0: #文件只输出一次
print(filename)
printflag = 1
if endflag == 0: #没有找到则输出此行
f2.write(line)
if endflag == 1 or commitflag ==1: # 增加commit后,重新开始
firstflag = 0
commitflag = 0
endflag = 0
f1.close()
f2.close()
if filechangeflag==1: #如果文件有改动,则重命名,否则只是删除备份文件
os.remove(filename)
os.rename("%s.bak" % filename, filename)
else:
os.remove("%s.bak" % filename)
def FileOperateMain():
pathlist=GetAllFileWithSuffix(DIRPATH, SUFFIX)
for filename in pathlist:
UpdateFile(filename)
if __name__ == "__main__":
FileOperateMain()
【python】在文件中找到指定的标记进行替换
最新推荐文章于 2023-04-18 10:08:43 发布