首先解决数目不对的问题,每次read(1)一次,指针就会往下移一个,你每次判断read(1)是否位空的时候,指针往下,你再read(1)来判断是否等于word时已经是下一个字符了,等于只有第偶数位的字符才能被判断,解决方法就是先赋值给变量,然后拿变量来进行判断。
第二个问题的错误提示,是你在自定义函数中修改了外部变量,把变量指定为全局变量就不会报错了,但是改完这个还有一堆的问题,看程序注释吧。file_name = input("请输入文件名:")
word = input("请输入需要替换的字符:")
new_word = input("请输入新的字符:")
count = 0
f = open(file_name,encoding='UTF-8')
while True:
a = f.read(1) #<---第一个错误修正处,包括下面两行
if a != '':
if a == word:
count += 1
else:
continue
else:
break
f.close()
print("文件"+file_name+"中共有%d个"%count+word)
answer = input("您确定要把所有的%s换成%s吗?YES or NO"%(word,new_word))
def change():
global f #<---第二个错误修正处,把f加入全局变量就不会报这个错了
f = open(file_name,encoding='UTF-8') #<---不重新以read方式打开文件,递归调用的文件状态是w,不能读
d = f.read() #<---犯了和第一个错误一样的问题,你需要研究一下文件指针问题了
if word in d:
(a,b) = d.split(word,1)
c = a+new_word+b
f = open(file_name,'w',encoding='UTF-8')
f.write(c)
change()
else:
return #<--- 返回c没用呀,你递归中又没有用到,一定要返回c,把c也指定为全局变量,不然报错
if answer == "YES":
change()
f.close()
else:
print("不改变原文件")
|