首先,我们面对的需求是将30个SQL脚本中的where条件进行修改,由原来的 "CRTABLE<>‘ZT’“替换为"CRTABLE<>‘ZT’ and CRTABLE<>‘SIC’”。
这自然是可以依次打开文本,并手动进行替换的,但由于文本数量过大,所以我们在此选择使用python进行批量替换。
第一步:
首先将需要替换的文本,放在固定的文件夹下,便于进行批量操作,同时为了保留原始数据,我们替换后不是进行覆盖,而是新增一个文件夹,所以需要先定义两个路径:
path1="D:\\需要替换的脚本"
path2="D:\\替换完成的脚本"
第二步:
path1里的所有文本都是需要进行替换的,所以我们需要遍历整个文件夹,并且获取路径以及对应的脚本名称:
for folderName, subfolders, filenames in os.walk(path1):
ic(filenames)
ic(folderName)
for file in filenames:
source=os.path.join(folderName, file)
target=os.path.join(path2,file)
代码中的ic,是icecream的包,如果没有安装过,可以理解为print。
这样运行之后,source实际上就是所有你需要替换的文件(包含文件路径以及文件名),target就是目标路径,加上相同的文件名。
在这里,我们是将替换后的文件换了一个文件夹,所以文件名相同不会有影响。
第三步:在获取了所有源文件以及目标文件之后,我们就要开始准备对源文件进行替换。
with open(source, 'r+', encoding='cp936') as f1:
with open(target,'w+',encoding='cp936') as f2:
str1 = r"CRTABLE<>'ZT'"
str2 = r"CRTABLE<>'ZT' and CRTABLE<>'SIC'"
for ss in f1.readlines():
tt = re.sub(str1, str2, ss)
f2.write(tt)
这一步,就是将source中所有需要替换的内容逐行检索,并且将其替换到目标文件中。
之后打开对应的目标文件夹,就会看到已经替换过的所有脚本了。
完整代码如下:
import os
from icecream import ic
import re
path1="D:\\需要替换的脚本"
path2="D:\\替换完成的脚本"
for folderName, subfolders, filenames in os.walk(path1):
ic(filenames)
ic(folderName)
for file in filenames:
source=os.path.join(folderName, file)
target=os.path.join(path2,file)
ic(source)
ic(target)
with open(source, 'r+', encoding='cp936') as f1:
with open(target,'w+',encoding='cp936') as f2:
str1 = r"CRTABLE<>'ZT'"
str2 = r"CRTABLE<>'ZT' and CRTABLE<>'SIC'"
for ss in f1.readlines():
tt = re.sub(str1, str2, ss)
f2.write(tt)