文件替换字符串的一个方法,一般方法是读然后重新写入文件,但是对于大文件来说这种操作不太理想,我们可以按位置修改指定位置的某个字符串,这样避免了全文件的读写,也避免内存的占用,

基本思路是,每一行每一行的读文件并查找特征字符串,然后用file.seek() 方法将读写的位置指定到需要修改处然后写入目标字符串。

用到的知识点,读文件

读文件的模式有很多种不一一列举,r+表示打开一个文件用于读写。文件指针将会放在文件的开头。

def readFile(path):
    with open(path,"r+") as f:
        for line in f:
            print(line)
        f.close()
    print("读文件完成")
path="D:\\tmp\\manim\\file\\1.txt"
readFile(path)
#文件路径,原字符串,要替换成的目标字符串
def replaceText(filePath,sourceText,targetText):
    if(len(sourceText)!=len(targetText)):
        raise Exception("原始字符串长度与目标字符串不符,容易覆盖有用信息", sourceText,targetText)
    with open(filePath,'r+') as f:
        line=f.readline()
        index=0
        # 遇到中间空行的可以自行观察并不是空字符串
        while ( line!=""):
            print(line)
            # 本行内字符串所在位置
            windex=line.find(sourceText)
            if(windex!=-1):
                print("windex={}".format(windex))
                print("当前位置:{},替换内容起点:{}".format(f.tell(),index+windex))
                f.seek(index+windex)
                f.write(targetText)
                # f.flush()
                f.seek(index)
            # 返回当前文件指针,应该是新一行的开始位置
            index=f.tell()
            line=f.readline()
        f.close()
    print("文件修改完毕")