lsc顺 发表于 2020-5-20 20:54:35

文件课后作业小问题

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)中直接写入替换后的整行语句,那原来的呢?没搞懂原来的语句是怎么删除的?只看到插入了新的替换后的语句。。

Twilight6 发表于 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)# 把列表中的每个字符串按行写入

这样能理解吗?

如果帮助到你了记得给个最佳哈~{:10_287:}

Twilight6 发表于 2020-5-20 21:13:50

其中content.append(eachline)。这不是往列表里加入新的字符串么?
你的理解是对的~

在f_w.writelines(content)中直接写入替换后的整行语句,那原来的呢?没搞懂原来的语句是怎么删除的?只看到插入了新的替换后的语句。。
因为第二次打开文件的方式为 'w'以写入方式打开文件,若文件已经存在,则创建个新文件覆盖原文件
若不存在,则创建新文件
所以说我们与其说是替换,不如说的直接重新覆盖

ouyunfu 发表于 2020-5-20 21:54:47

这里替换了
eachline=eachline.replace(old,new)

lsc顺 发表于 2020-5-20 23:16:22

Twilight6 发表于 2020-5-20 21:06
第一次打开文件,默认只读方式打开

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

懂了懂了!其实是创建了一个新的文件这个文件里是替换了之后的文件只要yes确定之后直接用这个新创建的文件去覆盖源文件而不是一行一行换是吧?

lsc顺 发表于 2020-5-20 23:17:26

Twilight6 发表于 2020-5-20 21:13
你的理解是对的~




懂了!不过这种文件的小细节 真的挺难啊。。。这方面用得多么。被文件的题目搞得晕晕的作业里有许多新函数 一个个查。。

Twilight6 发表于 2020-5-20 23:17:49

lsc顺 发表于 2020-5-20 23:16
懂了懂了!其实是创建了一个新的文件这个文件里是替换了之后的文件只要yes确定之后直接用这个新创 ...

对的~如果对你有帮助记得最佳嘿嘿~~~{:10_288:}

Twilight6 发表于 2020-5-20 23:18:28

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

加油嘿嘿,欢迎继续提问哈~~~
页: [1]
查看完整版本: 文件课后作业小问题