鱼C论坛

 找回密码
 立即注册
查看: 1625|回复: 6

[已解决]是什么原因导致无法字符串替换的

[复制链接]
发表于 2020-8-8 09:07:19 | 显示全部楼层 |阅读模式

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

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

x
  1. file1=input("输入文件名:")
  2. index=input("请输入需要替换的字符:")
  3. change=input("请输入新的字符:")
  4. count=0
  5. list_a=[]
  6. with open(file1) as file_a:
  7.     for a in file_a:#现在就是对每行数据字符串修改,然后全都保存到列表中,之后覆盖原文件
  8.         #不可以用切片操作,切片不能修改列表,且字符串的切片只是调用不可修改,列表切片才能修改且会改变原列表
  9.         #所以要采用.replace(原内含的字符串,新字符串)
  10.         if index in a:
  11.             a.replace(index,change)
  12.             count+=a.count(index)#因为一行中可能有很多个index不能只是加一
  13.         list_a.append(a)
  14.     print("文件中一共有{}个【{}】".format(count,index))
  15.     print(list_a)
  16.     judge=input("确定将所有的{}替换为{}吗?[yes/no]".format(index,change))
  17.     if judge in ["yes","YES","Yes"]:#这样更好,多种选择都行
  18.         with open(file1,"w") as fil_b:
  19.             for i in list_a:
  20.                 fil_b.writelines(i)
复制代码



                               
登录/注册后可看大图

原文件内容:
喂马劈柴,周游世界。
前程似锦

无论如何相信自己,没什么过不去的,加油。
没问题
修改后没有变化
QQ截图20200808090445.png
可见打印出修改后的列表中”没”并没有被修改为“有”,这是为什么?真的想不通?
感谢各位的解答
最佳答案
2020-8-8 09:58:06
本帖最后由 sunrise085 于 2020-8-8 09:59 编辑

我看了一下小甲鱼的这个程序是没问题的
你的程序之所有有问题是因为在第11行,replace之后并没有重新赋值给a,所以a没有变,这一点在第15行print的时候你应该能看到没有被修改啊
第11行修改为  a=a.replace(index,change)  就可以了
再者,第11行和第12行应该换一下位置。因为西药先统计,然后再替换,发展为统计出来的都是0了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-8-8 09:12:40 | 显示全部楼层
更加恐怖的是我把小甲鱼的源码复制了,依然无法替换
  1. def file_replace(file_name, rep_word, new_word):
  2.     f_read = open(file_name)

  3.     content = []
  4.     count = 0

  5.     for eachline in f_read:
  6.         if rep_word in eachline:
  7.             count += eachline.count(rep_word) #count感觉应该用这个
  8.             eachline = eachline.replace(rep_word, new_word)
  9.         content.append(eachline)   

  10.     decide = input('\n文件 %s 中共有%s个【%s】\n您确定要把所有的【%s】替换为【%s】吗?\n【YES/NO】:' \
  11.                    % (file_name, count, rep_word, rep_word, new_word))

  12.     if decide in ['YES', 'Yes', 'yes']:
  13.         f_write = open(file_name, 'w')
  14.         f_write.writelines(content)
  15.         f_write.close()

  16.     f_read.close()
复制代码


代码源自https://fishc.com.cn/thread-45487-1-2.html
感觉是电脑问题或者软件问题了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-8 09:56:34 | 显示全部楼层
Curry30huang 发表于 2020-8-8 09:12
更加恐怖的是我把小甲鱼的源码复制了,依然无法替换

代码源自https://fishc.com.cn/thread-45487-1-2.ht ...


是不是你文件查看错了?甲鱼哥代码确实没问题都不行,你运行起来有报错嘛?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-8 09:58:06 | 显示全部楼层    本楼为最佳答案   
本帖最后由 sunrise085 于 2020-8-8 09:59 编辑

我看了一下小甲鱼的这个程序是没问题的
你的程序之所有有问题是因为在第11行,replace之后并没有重新赋值给a,所以a没有变,这一点在第15行print的时候你应该能看到没有被修改啊
第11行修改为  a=a.replace(index,change)  就可以了
再者,第11行和第12行应该换一下位置。因为西药先统计,然后再替换,发展为统计出来的都是0了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-9 07:17:50 | 显示全部楼层
Twilight6 发表于 2020-8-8 09:56
是不是你文件查看错了?甲鱼哥代码确实没问题都不行,你运行起来有报错嘛?

找到答案了,感谢回答
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-9 07:19:40 | 显示全部楼层
sunrise085 发表于 2020-8-8 09:58
我看了一下小甲鱼的这个程序是没问题的
你的程序之所有有问题是因为在第11行,replace之后并没有重新赋值 ...

真的十分感谢,忘记重新赋值了,误认为和列表后缀函数的操作一样,误认为没有返回值了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-29 10:42:32 | 显示全部楼层
正好做作业遇到了相同问题,学习了~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-27 20:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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