鱼C论坛

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

[已解决]文件也妖娆,求助第二发!

[复制链接]
发表于 2018-7-4 15:03:56 | 显示全部楼层 |阅读模式

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

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

x
下面是小鱼老师29课课后题,全文件查找替换,程序是可以运行的,我有两个疑问。
fname=input('请输入文件名:')
str1=input('请输入被替换的内容:')
str2=input('请输入新的内容:')
f1=open('e://score//'+fname+'.txt')
countn=0
strn=''
for each in f1:
    if str1 in each:
        countn=countn+each.count(str1)
        strn=strn+each.replace(str1,str2)
    else:
        strn=strn+each
f1.close()
print('文件%s中共有%s个%s' % (fname,countn,str1))
if countn==0:
    print('未找到替换项!')
else:
    rep=input('你确定要把所有的%s替换为%s吗?(yes/no):' % (str1,str2))
    if rep=='yes':
        f1=open('e://score//'+fname+'.txt','w')
        f1.write(strn)
        f1.close()

一、文件为什么不能以写的形式打开一次(文件本身会变成空白),而必须要读一次,写一次,晕。
二、for each这一段,我原来是这样写的:
for each in f1:
        if str1 in each:
                countn=countn+each.count(st1)
                each.replace(str1,str2)
        strn=strn+each

我觉得逻辑上没有问题啊,为什么打死了都不替换。。。

请大大们多多帮助!
最佳答案
2018-7-4 15:27:16
一、文件为什么不能以写的形式打开一次(文件本身会变成空白),而必须要读一次,写一次,晕。
因为写的模式打开会自动清空文件内容,一般用于新建文件并进行写入

二 list是可变类型,而string是不可变类型
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-7-4 15:09:09 | 显示全部楼层
for each in f1:
    if str1 in each:
        countn=countn+each.count(str1)
        each=each.replace(str1,str2)
    strn=strn+each

第2个问题,改成这样就可以了,意思是列表方法可以对自身赋值,但字符串方法不可以自身赋值?是这样理解吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-4 15:27:16 | 显示全部楼层    本楼为最佳答案   
一、文件为什么不能以写的形式打开一次(文件本身会变成空白),而必须要读一次,写一次,晕。
因为写的模式打开会自动清空文件内容,一般用于新建文件并进行写入

二 list是可变类型,而string是不可变类型
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-4 15:30:15 | 显示全部楼层
哇,这个大好犀利啊,一击就中要害!赞!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-4 15:42:37 | 显示全部楼层
可以只打开一次,用r+的模式就可以,一次性全部读出,然后替换,然后truncate文件,然后write就OK
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-4 16:03:50 | 显示全部楼层
凌九霄 发表于 2018-7-4 15:42
可以只打开一次,用r+的模式就可以,一次性全部读出,然后替换,然后truncate文件,然后write就OK

谢谢我的九霄大大,每次都可以让我多学一点,给你32个赞!:)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-4 16:28:05 | 显示全部楼层
fname=input('请输入文件名:')
str1=input('请输入被替换的内容:')
str2=input('请输入新的内容:')
f1=open('e://score//'+fname+'.txt','r+')
countn=0
strn=''
for each in f1:
    if str1 in each:
        countn=countn+each.count(str1)
        each=each.replace(str1,str2)
    strn=strn+each
print('文件%s中共有%s个%s' % (fname,countn,str1))
if countn==0:
    print('未找到替换项!')
else:
    rep=input('你确定要把所有的%s替换为%s吗?(yes/no):' % (str1,str2))
    if rep=='yes':
        f1.seek(0,0)
        f1.truncate()
        f1.write(strn)
f1.close()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-4 16:29:01 | 显示全部楼层
谢谢九霄大大,直接多会用了两个方法,逻辑也清晰了很多
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-4 16:45:31 | 显示全部楼层
cable 发表于 2018-7-4 16:03
谢谢我的九霄大大,每次都可以让我多学一点,给你32个赞!:)

哈哈,不客气
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-21 16:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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