cable 发表于 2018-7-4 15:03:56

文件也妖娆,求助第二发!

下面是小鱼老师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

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

请大大们多多帮助!

cable 发表于 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个问题,改成这样就可以了,意思是列表方法可以对自身赋值,但字符串方法不可以自身赋值?是这样理解吗?

BngThea 发表于 2018-7-4 15:27:16

一、文件为什么不能以写的形式打开一次(文件本身会变成空白),而必须要读一次,写一次,晕。
因为写的模式打开会自动清空文件内容,一般用于新建文件并进行写入

二 list是可变类型,而string是不可变类型

cable 发表于 2018-7-4 15:30:15

哇,这个大好犀利啊,一击就中要害!赞!

凌九霄 发表于 2018-7-4 15:42:37

可以只打开一次,用r+的模式就可以,一次性全部读出,然后替换,然后truncate文件,然后write就OK

cable 发表于 2018-7-4 16:03:50

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

谢谢我的九霄大大,每次都可以让我多学一点,给你32个赞!:)

cable 发表于 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()

cable 发表于 2018-7-4 16:29:01

谢谢九霄大大,直接多会用了两个方法,逻辑也清晰了很多

凌九霄 发表于 2018-7-4 16:45:31

cable 发表于 2018-7-4 16:03
谢谢我的九霄大大,每次都可以让我多学一点,给你32个赞!:)

哈哈,不客气
页: [1]
查看完整版本: 文件也妖娆,求助第二发!