鱼C论坛

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

[已解决]文件课后作业小问题

[复制链接]
发表于 2020-5-20 20:54:35 | 显示全部楼层 |阅读模式

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

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

x
def replace(name,old,new):
    f=open(name)
    content=[]
    count=0
    for eachline in f:
        if old in eachline:
            count=eachline.count(old)
            eachline=eachline.replace(old,new)
        content.append(eachline)
    decide = input('\n文件%s中有%s个%s\n你确定要把所有的%s换成%s么?\nyes/no:'%(name,count,old,old,new))
    if decide in ['yes']:
        f_w=open(name,'w')
        f_w.writelines(content)
        f_w.close()
    f.close()




name=input('输入文件名')
old=input('需要替换的字符')
new=input('新的字符')
replace(name,old,new)

这是替换字符程序的代码,
其中content.append(eachline)。这不是往列表里加入新的字符串么?
在f_w.writelines(content)中直接写入替换后的整行语句,那原来的呢?没搞懂原来的语句是怎么删除的?只看到插入了新的替换后的语句。。
最佳答案
2020-5-20 23:17:49
lsc顺 发表于 2020-5-20 23:16
懂了懂了!其实是创建了一个新的文件  这个文件里是替换了之后的文件  只要yes确定之后  直接用这个新创 ...

对的~如果对你有帮助记得最佳嘿嘿~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-20 21:06:14 | 显示全部楼层
本帖最后由 Twilight6 于 2020-5-20 21:09 编辑

第一次打开文件,默认只读方式打开
f=open(name)
然后遍历每行该文件内容找到需求替换的字符串,将替换后的字符串替换后加入列表
否则就直接将原字符串加入列表,不进行替换:
    for eachline in f:
        if old in eachline:
            count=eachline.count(old)
            eachline=eachline.replace(old,new)
        content.append(eachline)
遍历完成后原文件内容就全部存在content的列表中了,而且还是以经将字符串替换完成的

然后再次打开文件,以'w'写入的方式打开文件,会直接将原文件覆盖成一个新的而且为空文本文件

其实并不是替换原文件的内容,而是直接创建了同名的文本文件进行覆盖然后在重新写入你上面列表里替换后的内容
    if decide in ['yes']:
        f_w=open(name,'w')
        f_w.writelines(content)  # 把列表中的每个字符串按行写入
这样能理解吗?


如果帮助到你了记得给个最佳哈~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-20 21:13:50 | 显示全部楼层
其中content.append(eachline)。这不是往列表里加入新的字符串么?

你的理解是对的~


在f_w.writelines(content)中直接写入替换后的整行语句,那原来的呢?没搞懂原来的语句是怎么删除的?只看到插入了新的替换后的语句。。

因为第二次打开文件的方式为 'w'以写入方式打开文件,若文件已经存在,则创建个新文件覆盖原文件
若不存在,则创建新文件
所以说我们与其说是替换,不如说的直接重新覆盖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-20 21:54:47 | 显示全部楼层
这里替换了
eachline=eachline.replace(old,new)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-20 23:16:22 | 显示全部楼层
Twilight6 发表于 2020-5-20 21:06
第一次打开文件,默认只读方式打开

然后遍历每行该文件内容找到需求替换的字符串,将替换后的字符串替换 ...

懂了懂了!其实是创建了一个新的文件  这个文件里是替换了之后的文件  只要yes确定之后  直接用这个新创建的文件去覆盖源文件  而不是一行一行换  是吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-20 23:17:26 | 显示全部楼层
Twilight6 发表于 2020-5-20 21:13
你的理解是对的~


懂了!不过这种文件的小细节 真的挺难啊。。。这方面用得多么。被文件的题目搞得晕晕的  作业里有许多新函数 一个个查。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-20 23:17:49 | 显示全部楼层    本楼为最佳答案   
lsc顺 发表于 2020-5-20 23:16
懂了懂了!其实是创建了一个新的文件  这个文件里是替换了之后的文件  只要yes确定之后  直接用这个新创 ...

对的~如果对你有帮助记得最佳嘿嘿~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-20 23:18:28 | 显示全部楼层
lsc顺 发表于 2020-5-20 23:17
懂了!不过这种文件的小细节 真的挺难啊。。。这方面用得多么。被文件的题目搞得晕晕的  作业里有许多新 ...

加油嘿嘿,欢迎继续提问哈~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-21 02:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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