文件替换字符串的一个方法,一般方法是读然后重新写入文件,但是对于大文件来说这种操作不太理想,我们可以按位置修改指定位置的某个字符串,这样避免了全文件的读写,也避免内存的占用,
基本思路是,每一行每一行的读文件并查找特征字符串,然后用file.seek() 方法将读写的位置指定到需要修改处然后写入目标字符串。
-
用到的知识点,读文件
读文件的模式有很多种不一一列举,r+表示打开一个文件用于读写。文件指针将会放在文件的开头。
def readFile(path): #R with open(path,"r+") as f: for line in f: print(line) f.close() print("读文件完成") path="D:\\tmp\\manim\\file\\1.txt" readFile(path)
-
查找字符串位置,str.find(target) 返回起始点位置如果是-1则表示不存在
"123WWW".find("WWW")
-
文件指针偏移到指定位置
#文件路径,原字符串,要替换成的目标字符串 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("文件修改完毕")
有兴趣可以用一个大的文本文件测试一下