鱼C论坛

 找回密码
 立即注册
查看: 2113|回复: 5

[已解决]29课课后题4

[复制链接]
发表于 2021-1-23 09:44:26 | 显示全部楼层 |阅读模式

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

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

x
又要劳烦各位前辈,   此题的答案我读的明白, 把文件内容 拆出, 替换关键字,组成新的列表文件,在选择确定修改后, 覆盖原有文件。 这里面有一点没太明白, 就是替换这步为何要在  用户选择 是否替换之前做?

还有  我写的 方法 在运行中 报错, 但是没太看明白  报错的原因何在,说  IO  OPERATION  UNSUPPORTED,

小甲鱼老师答案:

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')  #用重新拼合内容造新文件用’w'覆盖掉
        f_write.writelines(content)
        f_write.close()

    f_read.close()


file_name = input('请输入文件名:')
rep_word = input('请输入需要替换的单词或字符:')
new_word = input('请输入新的单词或字符:')
file_replace(file_name, rep_word, new_word)

========================================================================================
我的 代码

file=input('请输入文件名:')
repword=input('请输入需要替换的单词或字符:')
newword=input('请输入新的单词或字符:')
fread=open(file)
count=0
for eachline in fread:
    if repword in eachline:
        count+=1
decide=input('threre are  %s  words in file %s need to be chaged \n do u need to change all? [y]or[n]:' \
             %(count,file))

if decide in['y','y']:
        fwrite=open(file,'a')
        for eachline in fwrite:
            eachline=eachline.replace(repword,newword)
            fwrite.writelines(eachline)

fwrite.close()

运行后 ,

Traceback (most recent call last):
  File "D:/Python33/29kezuoyue 4 ti.py", line 15, in <module>
    for eachline in fwrite:
io.UnsupportedOperation: not readable



很好奇这个   not  readable    是 怎么引发的,     多谢指导
最佳答案
2021-1-23 11:41:53
本帖最后由 逃兵 于 2021-1-23 11:50 编辑

fwrite=open(file,'a') 这是附加写,但是不能读,这个就是not  readable的原因
fwrite=open(file,'a+') 是附加可读写
但是指针会在结尾,也读不出来

小甲鱼的方式是开辟一个临时的内存(比如列表)来存取你的数据,然后再以覆盖写入的方式打开文件,导入临时数据,覆盖掉原始数据,达成替换字符的目的

yes 和 no是来判断是否写入的

数据处理在yes no的判断之前完成是因为 为了查看有几处时 已经遍历过文件,在做这一部的同时就可以将数据处理完了,之后不用再次遍历数据了
replace.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-23 09:53:18 | 显示全部楼层
你不先执行读取操作怎么能知道原文本中有多少个需要替换的关键字是不是需要替换?而且那只是在内存中进行了替换,实际并没有在文本中执行替换操作,之前全是读取只是在选择yes之后才开始write,不选择的话就直接close了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-1-23 10:17:44 | 显示全部楼层
本帖最后由 suchocolate 于 2021-1-23 10:18 编辑

代码缩进看不清,不好重写你的代码,不过错误点在这:
fwrite=open(file,'a')
for eachline in fwrite:
    xxxx
读文件才能for x in f,写文件就不能这样了,写文件循环的应该是要写入的内容:
ls1 = ['1', '2', '3', '4', '5']
with open('test.txt', 'a') as f:
    for item in ls1:
        f.write(item)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-1-23 11:41:53 | 显示全部楼层    本楼为最佳答案   
本帖最后由 逃兵 于 2021-1-23 11:50 编辑

fwrite=open(file,'a') 这是附加写,但是不能读,这个就是not  readable的原因
fwrite=open(file,'a+') 是附加可读写
但是指针会在结尾,也读不出来

小甲鱼的方式是开辟一个临时的内存(比如列表)来存取你的数据,然后再以覆盖写入的方式打开文件,导入临时数据,覆盖掉原始数据,达成替换字符的目的

yes 和 no是来判断是否写入的

数据处理在yes no的判断之前完成是因为 为了查看有几处时 已经遍历过文件,在做这一部的同时就可以将数据处理完了,之后不用再次遍历数据了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-1-23 12:19:34 | 显示全部楼层
file = input('请输入文件名:') . strip()
if file:
    repword = input('请输入需要替换的单词或字符:')
    newword = input('请输入新的单词或字符:')
    fp = open(file)
    fread = list(fp)
    fp . close()
    count = 0
    for eachline in fread :
        e = eachline . find(repword , 0)
        while e != -1:
            count += 1
            e = eachline . find(repword , e + len(repword))
    if count:
        decide = input('threre are  %s  words in file %s need to be chaged \n do u need to change all? [y]or[n]:' \
           %(count,file)) . strip()
        if decide[0] in['Y','y']:
            fwrite = open(file , 'w')
            for eachline in fread :
                eachline = eachline . replace(repword , newword)
                fwrite . write(eachline)
            fwrite . close()
            print('成功替换。')
    else:
        print('没有找到需要替换的内容。') 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-1-27 00:02:42 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 17:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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