鱼C论坛

 找回密码
 立即注册
查看: 297|回复: 8

[已解决]PYTHON29J讲课后作业

[复制链接]
发表于 2020-4-13 10:42:32 | 显示全部楼层 |阅读模式

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

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

x
def RE(name,old_name,new_name):
    f = open(name)
    list1 = []
    cont = f.read().count(old_name)
    print('文件%s中共有%d个【%s】'%(name,cont,old_name))
    print('您确定要把所有的【%s】替换为【%s】吗?'%(old_name,new_name))
    for eachline in f:
        eachline = eachline.replace(old_name,new_name)
        list1.append(eachline)
    temp = input('YSE/NO:')
    if temp == 'YES':
        f2 = open(name,'w')
        f2.writelines(list1)
        print(f.read())
        f2.close()

    f.close()
   



name = input('请输入文件名:')
old_name = input('请输入需要替换的单词或者字符:')
new_name = input('请输入新的单词或者字符:')
RE(name,old_name,new_name)

为什么我运行输入YES之后,就啥也没有了??
最佳答案
2020-4-13 11:02:36
本帖最后由 Hoiste 于 2020-4-13 11:08 编辑

你在cont计算出现次数的时候用read()读完了文件,文件当前指针在末尾了,再遍历从末尾开始,所以什么都没有,你的列表其实也是空的,所以不要用read()或者重置一下文件指针,我改了你的方法用了前者,代码改了一下结构:
def RE(name,old_name,new_name):
    f = open(name)
    list1 = []
    cont = 0
    for eachline in f:
        cont += eachline.count(old_name)
        eachline = eachline.replace(old_name,new_name)
        list1.append(eachline)
    print('文件%s中共有%d个【%s】'%(name,cont,old_name))
    print('您确定要把所有的【%s】替换为【%s】吗?'%(old_name,new_name))
    temp = input('YSE/NO:')
    if temp == 'YES':
        f2 = open(name,'w')
        f2.writelines(list1)
        print(f.read())
        f2.close()

    f.close()
    



name = input('请输入文件名:')
old_name = input('请输入需要替换的单词或者字符:')
new_name = input('请输入新的单词或者字符:')
RE(name,old_name,new_name)
捕获.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-13 10:45:43 | 显示全部楼层
你用w模式打开的文件,当然啥都没有了。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-13 10:53:13 | 显示全部楼层
qiuyouzhi 发表于 2020-4-13 10:45
你用w模式打开的文件,当然啥都没有了。。。

为啥?我不是写入了么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-13 10:55:03 | 显示全部楼层
lichanglin1987 发表于 2020-4-13 10:53
为啥?我不是写入了么

w会覆盖原有的文件内容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-13 11:02:36 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Hoiste 于 2020-4-13 11:08 编辑

你在cont计算出现次数的时候用read()读完了文件,文件当前指针在末尾了,再遍历从末尾开始,所以什么都没有,你的列表其实也是空的,所以不要用read()或者重置一下文件指针,我改了你的方法用了前者,代码改了一下结构:
def RE(name,old_name,new_name):
    f = open(name)
    list1 = []
    cont = 0
    for eachline in f:
        cont += eachline.count(old_name)
        eachline = eachline.replace(old_name,new_name)
        list1.append(eachline)
    print('文件%s中共有%d个【%s】'%(name,cont,old_name))
    print('您确定要把所有的【%s】替换为【%s】吗?'%(old_name,new_name))
    temp = input('YSE/NO:')
    if temp == 'YES':
        f2 = open(name,'w')
        f2.writelines(list1)
        print(f.read())
        f2.close()

    f.close()
    



name = input('请输入文件名:')
old_name = input('请输入需要替换的单词或者字符:')
new_name = input('请输入新的单词或者字符:')
RE(name,old_name,new_name)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-13 11:03:24 | 显示全部楼层
qiuyouzhi 发表于 2020-4-13 10:55
w会覆盖原有的文件内容

问题是那个read哦,内容已经存在列表里了,用w打开是为了把再次填入改好的内容。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-13 11:05:29 | 显示全部楼层
Hoiste 发表于 2020-4-13 11:03
问题是那个read哦,内容已经存在列表里了,用w打开是为了把再次填入改好的内容。

哦哦,好的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-13 11:30:47 | 显示全部楼层
Hoiste 发表于 2020-4-13 11:02
你在cont计算出现次数的时候用read()读完了文件,文件当前指针在末尾了,再遍历从末尾开始,所以什么都没有 ...

好的,所以如果代码不变,重置一下指针或者重新打开一次文件  也是可行的是吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-13 11:42:38 | 显示全部楼层
lichanglin1987 发表于 2020-4-13 11:30
好的,所以如果代码不变,重置一下指针或者重新打开一次文件  也是可行的是吧?

是的,不过重新打开同一个文件只是为了重置指针的话没必要而且可能会出问题,用seek方法移动到初始位置就好了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-26 11:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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