大佬帮忙看看上面的代码为什么不能实现替换汉字,要用下面那种
错误代码:name=input('请输入文件名:')
f=open(r'C:\Users\wind\Desktop\%s'%name,'w')
old=input('请输入需要替换的单词或字符:')
new=input('请输入新的单词或字符:')
number=0
for each in f:
if old in each:
number+=1
print('文件%s中共有%d个【%s】'%(name,number,old))
print('您确定要把所有的【%s】替换为【%s】吗'%(old,new))
yn=input('【YES/NO】:')
if yn=='yes':
for each in f:
each.replace(old,new)
f.close()
正确代码:
name = input('请输入文件名:')
old = input('请输入需要替换的单词或字符:')
new = input('请输入新的单词或字符:')
f = open(r'C:\Users\wind\Desktop\%s'%name)
content = []
count = 0
for each in f:
if old in each:
count = count+1
each = each.replace(old, new)
content.append(each)
print('文件%s中共有%d个【%s】'%(name,count,old))
print('您确定要把所有的【%s】替换为【%s】吗'%(old,new))
yn=input('【YES/NO】:')
if yn=='yes':
f2 = open(r'C:\Users\wind\Desktop\%s'%name, 'w')
f2.writelines(content)
f2.close()
f.close() 因为你只是在内存中替换了,并没有保存到文件中
第一个代码只是将 each 字符串进行了替换,没有重新写入文件中去,而第二个代码将替换后的字符串重新写入文件了
Twilight6 发表于 2021-7-17 11:21
第一个代码只是将 each 字符串进行了替换,没有重新写入文件中去,而第二个代码将替换后的字符串重新写 ...
为什么如果一开始就 f = open(r'C:\Users\wind\Desktop\%s'%name,'w')会报错呀,连计算多少个old都不行 yyyyyyyynnnnn 发表于 2021-7-17 11:30
为什么如果一开始就 f = open(r'C:%users\wind\Desktop\%s'%name,'w')会报错呀,连计算多少个old都不 ...
'w' 是写入模式打开,会导致文件之前的内容被覆盖为空文件
如果有报错请把报错内容一同发出 Twilight6 发表于 2021-7-17 11:39
'w' 是写入模式打开,会导致文件之前的内容被覆盖为空文件
如果有报错请把报错内容一同发出
明白了,感谢!还有一个小问题,为什么最后要用 f2.writelines(content),不能直接用write,否则会显示
Traceback (most recent call last):
File "C:\Users\wind\.spyder-py3\temp.py", line 24, in <module>
f2.write(content)
TypeError: write() argument must be str, not list yyyyyyyynnnnn 发表于 2021-7-17 11:51
明白了,感谢!还有一个小问题,为什么最后要用 f2.writelines(content),不能直接用write,否则会显示
...
翻译一下 write() argument must be str, not list
write()参数必须是str,而不是list
content是列表,而write的参数只能是字符串 灰晨 发表于 2021-7-17 11:56
翻译一下 write() argument must be str, not list
write()参数必须是str,而不是list
content是列表 ...
好滴,明白了!感谢{:5_106:}
页:
[1]