鱼C论坛

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

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

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

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

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

x
file1=input("输入文件名:")
index=input("请输入需要替换的字符:")
change=input("请输入新的字符:")
count=0
list_a=[]
with open(file1) as file_a:
    for a in file_a:#现在就是对每行数据字符串修改,然后全都保存到列表中,之后覆盖原文件
        #不可以用切片操作,切片不能修改列表,且字符串的切片只是调用不可修改,列表切片才能修改且会改变原列表
        #所以要采用.replace(原内含的字符串,新字符串)
        if index in a:
            a.replace(index,change)
            count+=a.count(index)#因为一行中可能有很多个index不能只是加一
        list_a.append(a)
    print("文件中一共有{}个【{}】".format(count,index))
    print(list_a)
    judge=input("确定将所有的{}替换为{}吗?[yes/no]".format(index,change))
    if judge in ["yes","YES","Yes"]:#这样更好,多种选择都行
        with open(file1,"w") as fil_b:
            for i in list_a:
                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了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

    content = []
    count = 0

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

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

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

    f_read.close()

代码源自https://fishc.com.cn/thread-45487-1-2.html
感觉是电脑问题或者软件问题了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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


是不是你文件查看错了?甲鱼哥代码确实没问题都不行,你运行起来有报错嘛?
想知道小甲鱼最近在做啥?请访问 -> 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了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

找到答案了,感谢回答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

真的十分感谢,忘记重新赋值了,误认为和列表后缀函数的操作一样,误认为没有返回值了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-29 10:42:32 | 显示全部楼层
正好做作业遇到了相同问题,学习了~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-18 11:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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