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 |