When python modifies a file, using w mode will clear/overwrite the original file. You can first open it with read (r), write it to the memory, and then open it with write (w).
Replace "taste" in the text with tasting
Yesterday when I was young 昨日当我年少轻狂 The taste of life was sweet 生命的滋味是甜的 As rain upon my tongue
#将文件读取到内存中 with open("./fileread.txt","r",encoding="utf-8") as f: lines = f.readlines() #写的方式打开文件 with open("./fileread.txt","w",encoding="utf-8") as f_w: for line in lines: if "taste" in line: #替换 line = line.replace("taste","tasting") f_w.write(line)
2. Search and replace in the full text or replace in a single line
#文本内容 Yesterday when I was young 昨日当我年少轻狂 The taste of life was sweet 生命的滋味是甜的 As rain upon my tongue taste taste taste taste
#定义一个函数,带有4个参数 #x 表示要更新的文件名称 #y 表示要被替换的内容 #z 表示 替换后的内容 #s 默认参数为 1 表示只替换第一个匹配到的字符串 # 如果参数为 s = 'g' 则表示全文替换 def string_switch(x,y,z,s=1): with open(x, "r", encoding="utf-8") as f: #readlines以列表的形式将文件读出 lines = f.readlines() with open(x, "w", encoding="utf-8") as f_w: #定义一个数字,用来记录在读取文件时在列表中的位置 n = 0 #默认选项,只替换第一次匹配到的行中的字符串 if s == 1: for line in lines: if y in line: line = line.replace(y,z) f_w.write(line) n += 1 break f_w.write(line) n += 1 #将剩余的文本内容继续输出 for i in range(n,len(lines)): f_w.write(lines[i]) #全局匹配替换 elif s == 'g': for line in lines: if y in line: line = line.replace(y,z) f_w.write(line)
Test
1) Default parameter 1, only replace the first matched line
string_switch("fileread.txt","taste","tasting") #结果 Yesterday when I was young 昨日当我年少轻狂 The tasting of life was sweet 生命的滋味是甜的 As rain upon my tongue taste taste taste taste
2) Global replacement
string_switch("fileread.txt","taste","tasting","g") #结果 Yesterday when I was young 昨日当我年少轻狂 The tasting of life was sweet 生命的滋味是甜的 As rain upon my tongue tasting tasting tasting tasting
For more related articles on how to implement full-text or single-line replacement for file operations in python, please pay attention to the PHP Chinese website!