【python】在文件中找到指定的标记进行替换

# -*- 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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值