鱼C论坛

 找回密码
 立即注册
查看: 1552|回复: 7

[已解决]大佬帮忙看看上面的代码为什么不能实现替换汉字,要用下面那种

[复制链接]
发表于 2021-7-17 11:07:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
错误代码:
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()
最佳答案
2021-7-17 11:21:53


第一个代码只是将 each 字符串进行了替换,没有重新写入文件中去,而第二个代码将替换后的字符串重新写入文件了

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-17 11:21:01 From FishC Mobile | 显示全部楼层
因为你只是在内存中替换了,并没有保存到文件中
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-17 11:21:53 | 显示全部楼层    本楼为最佳答案   


第一个代码只是将 each 字符串进行了替换,没有重新写入文件中去,而第二个代码将替换后的字符串重新写入文件了

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-17 11:30:27 | 显示全部楼层
Twilight6 发表于 2021-7-17 11:21
第一个代码只是将 each 字符串进行了替换,没有重新写入文件中去,而第二个代码将替换后的字符串重新写 ...

为什么如果一开始就   f = open(r'C:\Users\wind\Desktop\%s'%name,'w')  会报错呀,连计算多少个old都不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-17 11:39:05 | 显示全部楼层
yyyyyyyynnnnn 发表于 2021-7-17 11:30
为什么如果一开始就   f = open(r'C:%users\wind\Desktop\%s'%name,'w')  会报错呀,连计算多少个old都不 ...



'w' 是写入模式打开,会导致文件之前的内容被覆盖为空文件

如果有报错请把报错内容一同发出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-17 11:51:15 | 显示全部楼层
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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-17 11:56:19 | 显示全部楼层
yyyyyyyynnnnn 发表于 2021-7-17 11:51
明白了,感谢!还有一个小问题,为什么最后要用 f2.writelines(content),不能直接用write,否则会显示
...

翻译一下 write() argument must be str, not list
write()参数必须是str,而不是list
content是列表,而write的参数只能是字符串
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-17 12:05:07 | 显示全部楼层
灰晨 发表于 2021-7-17 11:56
翻译一下 write() argument must be str, not list
write()参数必须是str,而不是list
content是列表 ...

好滴,明白了!感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-14 00:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表