python修改文件时,使用w模式会将原本的文件清空/覆盖。可以先用读(r)的方式打开,写到内存中,然后再用写(w)的方式打开。
替换文本中的taste 为 tasting
1 2 3 4 5 | Yesterday when I was young
昨日当我年少轻狂
The taste of life was sweet
生命的滋味是甜的
As rain upon my tongue
|
登录后复制
1 2 3 4 5 6 7 8 9 10 | #将文件读取到内存中
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.全文中搜索替换或者单行替换
1 2 3 4 5 6 7 8 9 10 | #文本内容
Yesterday when I was young
昨日当我年少轻狂
The taste of life was sweet
生命的滋味是甜的
As rain upon my tongue
taste
taste
taste
taste
|
登录后复制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #定义一个函数,带有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)
|
登录后复制
测试
1)默认参数 1,只替换匹配到的第一行
1 2 3 4 5 6 7 8 9 10 11 12 | 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)全局替换
1 2 3 4 5 6 7 8 9 10 11 12 | 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
|
登录后复制
以上是介绍python对文件操作实现全文或单行替换的详细内容。更多信息请关注PHP中文网其他相关文章!