对大量文本进行指定内容的批量替换

首先,我们面对的需求是将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)

你可能感兴趣的:(python记录,python,经验分享)